Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpRfMd 129 of 322 menu
◀ ▶

Методы класса в Java

Рефлексия перечисляет не только поля, но и методы типа. Каждый элемент списка имеет тип Method: у него есть имя, тип возвращаемого значения и параметры.

Метод getDeclaredMethods возвращает все методы, объявленные в классе, включая закрытые и без учёта наследования:

class Ledger { private int balance; Ledger(int balance) { this.balance = balance; } boolean isEmpty() { return balance == 0; } String label() { return "ledger"; } } public class Main { public static void main(String[] args) { for (var method : Ledger.class.getDeclaredMethods()) { System.out.println(method.getName()); } } }

Метод getMethods добавляет открытые методы родителей, в том числе унаследованные от Object. Поэтому список обычно длиннее, чем у getDeclaredMethods:

class Ledger { boolean isEmpty() { return true; } } public class Main { public static void main(String[] args) { System.out.println(Ledger.class.getDeclaredMethods().length); System.out.println(Ledger.class.getMethods().length); } }

Оба списка можно обойти в одном входе в программу - сначала объявленные методы, затем открытые с учётом наследования, если нужно сравнить состав:

class Ledger { boolean isEmpty() { return true; } } public class Main { public static void main(String[] args) { Class<?> kind = Ledger.class; for (var method : kind.getDeclaredMethods()) { System.out.println("decl:" + method.getName()); } for (var method : kind.getMethods()) { if (method.getDeclaringClass() == Ledger.class) { System.out.println("pub:" + method.getName()); } } } }

Сделайте класс Engine с двумя методами с разными именами. Напечатайте имена всех объявленных методов.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить