03
Июн
2017

Проверка метода класса на существование

Имеется абстрактный класс AbstractClass и несколько классов-наследников, в одном из которых определен метод Method. Имеется еще один метод Method2, в который передаются параметрами экземпляры класса AbstractClass, поскольку неизвестно точно, какой из классов-наследников следует туда передать, так как выбор происходит независимо от пользователя на основе генерирования квазислучаных чисел. Хотелось бы запустить метод без абстрактного объявления его в абстрактном классе и без последующего переопределения его в каждом классе-наследнике так, чтобы если он есть в наследнике, он выполнялся, а если нет – игнорировался.

abstract class AbstractClass{}

class Class1 extends AbstractClass{}
.
.
.
class ClassN extends AbstractClass {
    void Method(){...}
}

// скобочек и N+1 в оригинальном коде нет
class Class(N+1) {
    // какой-то из них может быть ClassN
    void Method2(AbstractClass a, AbstractClass b) {
        try{
            ClassN.Method();
        } catch(NoSuchMethodError e) {
            // ignore
        }
}

Источник: https://ru.stackoverflow.com/questions/674870/%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0-%D0%BD%D0%B0-%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Share

Тебе может это понравится...