Вызов метода в Java, зная его название в виде строки
Проблема, которая может возникнуть при работе с Java, это необходимость вызвать метод, имя которого дано в виде строки. Предположим, есть две переменные:
Алексей Кодов
Автор статьи
10 июля 2023 в 16:53
Проблема, которая может возникнуть при работе с Java, это необходимость вызвать метод, имя которого дано в виде строки. Предположим, есть две переменные:
Object obj; String methodName = "getName";
Задача состоит в том, чтобы вызвать метод, указанный в переменной methodName , для объекта obj , не зная заранее класс этого объекта.
Предположим, что метод, который нужно вызвать, не принимает параметров и возвращает строку. Это типичный геттер для Java-бина.
Для решения этой задачи можно воспользоваться механизмом рефлексии в Java. Рефлексия позволяет исследовать информацию о классах, интерфейсах, полях и методах во время исполнения программы, а также вызывать методы и создавать новые объекты.
Вот как это можно сделать:
try < Method method = obj.getClass().getMethod(methodName); String result = (String) method.invoke(obj); >catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e)
Объясним, что происходит в этом коде.
- Method method = obj.getClass().getMethod(methodName); — получаем объект Method , представляющий метод с именем methodName для класса объекта obj .
- String result = (String) method.invoke(obj); — вызываем этот метод для объекта obj и получаем результат. Поскольку известно, что метод возвращает строку, результат приводится к типу String .
Обратите внимание, что этот код может выдать исключения NoSuchMethodException , IllegalAccessException и InvocationTargetException , которые нужно обработать.
Таким образом, с помощью рефлексии можно динамически вызывать методы в Java, зная их имена в виде строк.
Методы в Java
В Java приложение состоит из классов. Классы, в свою очередь, состоят из переменных. Они отвечают за хранение данных и методов, которые отвечают за поведение класса: иначе говоря, логику, которую он может предоставлять (например, обработку некоторых данных, вызов других методов, и т. д.). Говорить о таких составляющих как переменные можно долго, но мы сегодня не для этого собрались. Давайте лучше поговорим о такой составляющей класса как метод.
Метод — это именованный блок кода, объявляемый внутри класса. Он содержит некоторую законченную последовательность действий (инструкций), направленных на решение отдельной задачи, который можно многократно использовать. Иными словами, метод — это некоторая функция: что-то, что умеет делать ваш класс. В других языках тоже присутствуют функции. Только в Java они являются членами классов и, согласно терминологии ООП, называются методами. Но прежде чем продолжить, давайте рассмотрим небольшой пример:
public String constructHelloSentence(String name)
Тут ничего сложного: метод Java, задача которого сформировать строку приветствия, с именем, которое мы ему передаем. Как например — Hello world! My name is Bobby Давайте как следует разберемся с построением метода, рассмотрев каждое ключевое слово в объявлении метода (слева направо). Наше первое ключевое слово — public , и оно обозначает модификатор доступа:
Модификаторы доступа

Указывают допустимую область видимости для членов класса, то есть ограничение мест, в которых разрешается использовать какую-то переменную или метод. В языке Java применяют такие модификаторы доступа:
- public : публичный. Методы или поля с этим модификатором общедоступны, видимы другим классам (а точнее, их методам и полям) из текущего пакета и из внешних пакетов. Это самый широкий уровень доступа из известных;
- protected : к методам или переменным с этим модификатором есть доступ из любого места в текущем классе или пакете, или в классах, наследующих данный, а заодно — и методы или поля, даже если они находятся в других пакетах
protected String constructHelloSentence(String name)
String constructHelloSentence(String name)
private String constructHelloSentence(String name)
Возвращаемое значение
Возвращаемое значение — это данные (некий результат выполнения метода), которые приходят на его место после вызова. Каждый метод имеет возвращаемое значение. Или нет?
Методы с возвращаемым значением
Это значение может быть данными любого вида: как переменной простого типа, так и ссылочного. В рассматриваемом примере мы указываем, что метод должен вернуть объект типа String , что как мы помним, является классом, описывающим строку. Второй момент здесь — слово return . Оно имеет прямое отношение к возвращаемому значению: значение, стоящее после него, будет отправлено назад, на место вызова метода, а сам же метод после return закроется. Это слово обычно идёт в последней строке метода (кроме методов с различными ветвлениями типа if, else.. .). Если написать код в следующей строке после return :
private String constructHelloSentence(String name)
то мы получим ругательства компилятора, что не очень хорошо (компилятор ерунду не посоветует). Также нужно помнить, что тип данных после с должен совпадать с объявленным в сигнатуре метода. Подробнее о return читайте здесь.
void
Для каких служит void в Java? Не у всех методов есть возвращаемое значение. Некоторым или нечего, или не нужно ничего возвращать. Что же тогда делать? Тогда в сигнатуре метода на место возвращаемого значения мы пишем void . Как бы выглядел наш метод без возвращаемого значения?
protected void constructHelloSentence(String name)
Вы наверняка заметили, что вместе с возвращаемым значением у нас исчезло слово return Так и есть, ведь наш метод и не должен ничего возвращать. Тем не менее, его можно тут поставить, но без какого-то значения, просто return ; в последней строке. Это в целом бесполезно, поэтому в методах с void он необязателен. Тем не менее, его можно применять с пользой в void методах, например, при ветвлениях или циклах, когда нужно немедленно выйти из метода. Далее в объявлении метода у нас шло constructHelloSentence .
Названия методов

constructHelloSentence — название метода, отличительная особенность, по которой мы сможем отличать тот или иной метод. И, соответственно, вызывать тот или иной метод. Названия методов должны начинаться с маленькой буквы, но и использовать верблюжий стиль (CamelCase, верблюжий регистр): т.е. каждое следующее слово в названии стоит впритык к предыдущему и пишется с большой буквы. Наименования методов должны описывать метод (лучший комментарий — правильное именование). Для этого используйте глаголы или сочетания с глаголами: getCat , delete , createCar , и так далее. В пределах одного класса имена методов должны быть уникальными (не считая перегрузки методов, о чем поговорим немного ниже). Смотрим дальше разбираемый нами метод и видим ( String name )
Параметры метода
Методы могут иметь (или не иметь) определенные данные, которые будут поступать снаружи, а именно — с места, где и был вызван метод. В нашем случае мы видим, что приходит объект типа String с именем name и в дальнейшем мы используем эту переменную в нашем методе. В методе можно использовать неограниченное количество параметров, но больше 7 — не рекомендуется. Когда мы не знаем точное количество элементов, но все эти элементы нужны для одной цели и будут одного типа (например, String ), используется многоточие:
public void constructHelloSentence(String. name)
Обращение к каждому элементу будет такого вида: name[0] Ничего не напоминает? Верно, массив! Ничего не изменится, если мы напишем:
protected void constructHelloSentence(String[] name)
Обращение к элементам также будет вида: name[1] И ещё кое что. Аргументы метода могут быть final:
public String constructHelloSentence(final String name)
Это значит, что ссылка name привязана к конкретному объекту String , и переопределить её нельзя. Про работу с ссылочными переменными и их взаимодействие с зарезервированным словом final можно прочитать в материале “Ссылочные типы данных в Java”.
Вызов методов

Итак, с созданием методов разобрались, теперь давайте поговорим об их использовании. Как вызвать метод в Java? Каждый метод в Java находится в классе. Чтобы разобраться, как устроен вызов методов в Java, возьмем класс:
public class StringConstructor < public String constructHelloSentence(String name) < String resultSentence = "Hello world! My name is " + name; System.out.println(resultSentence); return resultSentence; >>
Так как у нас метод не является статическим (это отдельная тема для разговора, выходящая за рамки сегодняшней статьи), для его вызова нужно сперва создать объект, и уже у него вызвать метод:
class Application < public static void main(String[] args) < StringConstructor stringConstructor = new StringConstructor(); stringConstructor.constructHelloSentence("Den"); >>
В аргументы нашего метода мы передали строку (имя), которую хотим видеть в результирующей строке, выведенной на экран:
Hello world! My name is Den
Также стоит напомнить, что методы можно переиспользовать то количество раз, сколько нам потребуется — ограничений нет.
this
Часто в коде можно увидеть ключевое слово this , как например в сеттерах:
public void setValue(Long value)
И что же оно значит? this в Java — это ссылка на текущий объект данного класса. Например, если мы создали объект:
StringConstructor stringConstructor = new StringConstructor();
то this внутри объекта stringConstructor будет ссылкой на этот же объект. this используется как для ссылки на переменную объекта (как в сеттере выше), так и для вызова некоторого метода. Мы можем немного переписать наш класс:
public class StringConstructor < public String constructHelloSentence(String name) < String resultSentence = this.getSentence() + name; System.out.println(resultSentence); return resultSentence; >private String getSentence() < return "Hello world! My name is "; >>
Через this мы вызываем метод данного объекта, для взятия необходимой строки. Но всё же как правило для методов this почти не используется, так как и без него идёт ссылка на метод данного объекта, в основном он используется для на переменную объекта.
Перегрузка методов

Предположим нам понадобился метод, выполняющий по сути ту же самую логику, но в предложении Hello world ! вместо world мы хотим вставить своё слово (строку). Но ведь у нас уже есть метод constructHelloSentence . Значит, нам нужно придумать новое название для метода, который выполняет по сути тот же функционал? Как бы не так: в этот момент на помощь нам приходит перегрузка методов. Перегрузка методов — это использование одного и того же имени метода несколько раз при его объявлении в классе. С точки зрения синтаксиса языка, не может быть двух одинаковых имен в некотором локальном пространстве. Но при этом допускается объявление методов с одинаковыми именами но отличающимися аргументами. Иными словами, класс содержит в себе перегруженные, когда есть два и более методов с одинаковыми названиями, но различными входными данными:
public class Constructor < public String constructHelloSentence(String name) < String resultSentence = "Hello world! My name is " + name; System.out.println(resultSentence); return resultSentence; >protected String constructHelloSentence(String firstName, String secondName) < String resultSentence = "Hello " + firstName + "! My name is " + secondName; System.out.println(resultSentence); return resultSentence; >>
Здесь мы видим, что методы не обязаны содержать одинаковый модификатор доступа (как и возвращаемый тип). Если вызывается перегруженный метод, то из нескольких объявленных методов компилятор автоматически определяет нужный по параметрам, которые указываются при вызове.
Как вызвать метод в Java

В этом посте мы узнаем, как вызвать метод в Java. Это удобный «фрагмент кода», к которому вы можете получить доступ из любого места вашей программы, избавляя от необходимости писать одни и те же строки кода снова и снова.
Создавая код таким образом, разработчики могут создавать гораздо больше модульных и переносимых программ и экономить много времени на вводе кода.
Как вызвать метод в Java – основы
Чтобы вызвать метод в Java, введите имя метода и заключите его в круглые скобки.
Например, следующее вызывает метод под названием «helloMethod ()»:
helloMethod();
Чтобы это сработало, мы должны сначала создать наш метод helloMethod (). Мы можем увидеть, как может выглядеть helloMethod здесь:
public static void helloMethod()
Этот код просто печатает “Hello world!” к экрану. Вот почему мы всегда пишем helloMethod (); в нашем коде это сообщение будет отображаться на экране.
Если вы когда-нибудь захотите изменить отображаемое сообщение, вам просто нужно его изменить один раз – вместо того, чтобы каждый раз использовать его в коде.
Создание методов в Java
Давайте на мгновение перемотаем назад и подробнее рассмотрим созданный нами метод. Почему это выглядит именно так?
Чтобы создать метод, мы используем ряд операторов для определения этого метода. В предыдущем примере:
- Public – означает, что метод доступен для других классов, кроме этого.
- Статический – означает, что метод принадлежит классу, а не классу пример класса
- Void – означает, что метод не возвращает значение
Если вы этого не понимаете, не волнуйтесь! Большинство новых разработчиков смогут использовать «public static void» для большинства своих методов, и им не о чем беспокоиться. Тем не менее, мы рассмотрим два из этих предложений в следующих нескольких разделах.
Считается хорошей практикой называть методы Java «верблюжьим регистром». Поскольку у нас нет пробелов, Camel Case может обойти это, используя каждое слово, кроме первого, с заглавной буквы. Методы, как правило, должны быть глаголами (хотя я отменил это правило!).
Также см: Введение в синтаксис Java для разработки под Android
После того, как мы назовем наш метод, мы будем использовать круглые скобки для добавления любых аргументов. Аргумент – это переменная, которую мы хотим передать из одного метода в другой. Переменные – это значения, представленные словами. Опять же, если это сбивает с толку, можно добавить две закрытые круглые скобки.
Как использовать аргументы при вызове метода в Java
Как упоминалось ранее, мы можем заключать аргументы в круглые скобки при определении наших методов. Это позволяет нам передавать переменные и, следовательно, значения между методами.
Например, «Строка» – это тип переменной, содержащей буквенно-цифровые символы. Мы создаем строку, используя слово «String», за которым следует имя.
Каждый раз, когда мы вызываем этот метод, мы должны добавить значение, которое хотим использовать, в круглых скобках.
helloClass.helloMethod(«Hello there!»); public static void helloMethod(String helloMessage)
Как метод вызывается вне класса
Публичный метод – это метод, который можно вызывать извне вашего класса. Для этого используйте следующий синтаксис:
nameOfClass.nameOfMethod (аргументы)
class Main < public static void main(String[] args) < helloClass.helloMethod(); >> class helloClass < public static void helloMethod() < System.out.println("Hello world!"); >>
Однако, если бы мы хотели, чтобы это не работало, мы просто заменили бы слово «общедоступный» словом «частный».
Возвращаемые значения
Наконец, мы можем возвращать определенные значения из наших методов. Посмотрим, как это можно использовать.
Допустим, мы решили, что мы хотим, чтобы метод выдавал наше приветствие, но не отображал его на экране. Таким образом, мы можем заставить метод возвращать строку. Для этого мы меняем слово «void» для типа переменной, которую хотим вернуть, и добавляем «return значениеВ конце метода.
Это меняет способ вызова метода в Java, поскольку мы можем просто вставить имя метода в строку в нашем коде, как если бы это была переменная:
class Main < public static void main(String[] args) < System.out.println(helloMethod()); >public static String helloMethod() < return "Hello there!"; >>
Если вам все еще интересно, что это за «статика», мы рекомендуем вам прочитать классы и объекты в официальной документации Oracle по Java.
Или просмотрите наш список лучших мест для изучения Java. Там вы узнаете об объектах, классах и многом другом!
Документация
В этом примере показано, как вызвать метод java.util.ArrayList класс. Пример демонстрирует то, что это означает иметь Java ® объекты как ссылки в MATLAB ® .
java.util.ArrayList класс является частью библиотек стандарта Java. Поэтому класс уже находится на пути к классу Java. Если вы вызываете метод в классе, который не находится в стандартной библиотеке, то обновите путь к классу Java так, чтобы MATLAB мог найти метод. Для получения информации смотрите Путь к классу Java.
Выбор конструктора класса к объекту Create Java
Создайте ArrayList объект при помощи одного из конструкторов класса. Отобразите методы класса и ищите ArrayList записи в окне методов.
methodsview('java.util.ArrayList')
ArrayList (java.util.Collection) ArrayList ( ) ArrayList (int)
Выберите ArrayList() синтаксис, который создает пустой список с начальной способностью 10.
Сокращение имени класса
Используйте import функция, чтобы относиться к ArrayList класс, не задавая целый пакет называет java.util .
import java.util.ArrayList
Создание списка массива
Создайте пустой ArrayList объект.
A = ArrayList;
Передайте данные MATLAB add Метод
Добавьте элементы в ArrayList объект. Посмотрите в окне методов на подписи для add метод.
void add (int,java.lang.Object) boolean add (java.lang.Object)
Выберите boolean add(java.lang.Object) синтаксис. Аргумент java.lang.Object тип Java. Чтобы найти соответствующий тип MATLAB, посмотрите на Передачу java.lang. Объектная таблица. Если вы передаете double аргумент, MATLAB преобразует его в java.lang.Double ввод.
Добавление элементов к ArrayList
Вызывать add метод, используйте синтаксис MATLAB.
add(A,5); A
A = [5.0]
В качестве альтернативы используйте синтаксис Java.
A.add(10); A
A = [5.0, 10.0]
Объекты Java являются ссылками в MATLAB
Чтобы наблюдать поведение копирования объектов Java, присвойте A к новой переменной B .
B = A;
B ссылка на A . На любое изменение в объекте ссылается B также изменяет объект в A . Или код MATLAB или код Java могут изменить объект. Например, добавьте значение в B , и затем отобразите A .
add(B,15); A
A = [5.0, 10.0, 15.0]
Используйте ArrayList Объект в MATLAB
Предположим, что вы вызываете метод Java, который возвращает объект Java типа ArrayList . Если вы вызвали команды в предыдущих разделах, переменной A содержит следующие значения:
class(A)
ans = 'java.util.ArrayList'
A = [5.0, 10.0, 15.0]
Использовать A в MATLAB преобразуйте объект в любого java.lang.Object введите или к типу примитива. Затем примените MATLAB cell и cell2mat функции.
От ArrayList окно методов, найдите toArray метод, который преобразует ArrayList к java.lang.Object[] .
java.lang.Object[] toArray (java.lang.Object[])
Преобразуйте A к java.lang.Object .
res = toArray(A)
res = java.lang.Object[]: [ 5] [10] [15]
Преобразуйте выход в тип MATLAB.
res = cell(res)'
res = 1×3 cell array [5] [10] [15]
Чтобы преобразовать это значение в матрицу, элементами должен быть тот же тип. В этом примере значения преобразуют, чтобы ввести double .
data = cell2mat(res)
data = 5 10 15
Смотрите также
Связанные примеры
Больше о
- Javaclasspath
- Передача данных методам Java
- Обработка данных, возвращенных в методы Java
- Как MATLAB выделяет память
Внешние веб-сайты
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
