Вызов нового метода анонимного класса

114
14 сентября 2021, 00:00
interface Lopzik{
    void petrol();
}
  public class Test{
    public static void main(String[] args) {
        Lopzik lopzik = new Lopzik(){
            @Override
            public void petrol() {
                System.out.println("ouch");
            }
            public String toString() {
                return "poncho";
            }
            public String kopo(){return "last";} //можно как то вызвать данный метод тут? (номер 2)
        };
        lopzik.petrol();
        // номер 2
    }
}

Как можно вызвать метод kopo() в методе main, если данный метод не существует в Lopzik{} а внедрен во время определения анонимного класса? Или придется использовать его только в рамках тела анонимного класса?

Внимание: Если данный вопрос вдруг оказался дубликатом, тогда просто вставьте ссылку в комментах, без негативных голосов. Если содержание ссылки дает исчерпывающий ответ, тогда я свой вопрос удалю.

Answer 1

Вы сами ограничили тип переменной, когда указали конкретный тип Lopzik lopzik = ...

Вариант 1

Если используется Java 10 или выше, то можно просто написать var lopzik = ... и тип выведется сам с нужными методами.

Вариант 2

Если используется Java ниже 10 версии, то можно создать интерфейс с дополнительным методом String kopo() и наследовать его при создании анонимного класса.

Вариант 3

В крайнем случае можно через вызвать метод так:

(String) lopzik.getClass().getMethod("kopo").invoke(lopzik), но это нежелательно.

READ ALSO
Как запустить игру Minecraft из своего лаунчера?

Как запустить игру Minecraft из своего лаунчера?

Делаю свой лаунчер для проектаСделал загрузку клиента, авторизацию, загрузку новостей из группы вк, всё отлично

178
В методе onRewardedAdClosed() admob происходит "The webview is destroyed. Ignoring action."

В методе onRewardedAdClosed() admob происходит "The webview is destroyed. Ignoring action."

Тестовая реклама показывается, но при закрытии рекламы идет ошибка, которая не дает выполнится коду внутри onRewardedAdClosed(), код ошибки:

180
Как вывести число в экспоненциальной форме java

Как вывести число в экспоненциальной форме java

Как вывести число в экспоненциальной форме, например есть число 0,00000007891

151
Программа не завершает работу

Программа не завершает работу

Мне нужно циклически сдвигать символы, после ряда таких сдвигов должна получится реверснутая строкаНапример: caba -> acba->abca->abac Нужно подсчитать...

97