Аноним Внутренний класс - PullRequest
0 голосов
/ 01 марта 2011
class One {
Two two() {
    return new Two() {
        Two(){}
        Two(String s) {
            System.out.println("s= "+s);
        }
    };
    }
}

class Ajay {
    public static void main(String ...strings ){
        One one=new One();
        System.out.println(one.two());
    }
}

Приведенный выше пример кода не может быть скомпилирован. Он говорит: «Два не могут быть решены».В чем проблема в этом коде ??

Ответы [ 3 ]

1 голос
/ 01 марта 2011

вы создаете

new Two(), поэтому в classpath должен быть допустимый класс.

сделайте его

class Two{

}

class One {
Two two() {
    return new Two() {
//        Two(){}
//        Two(String s) {
//            System.out.println("s= "+s);
//        }//you can't override constuctors
    };
    }
}

или слева от нового должно бытьбыть супер классом или интерфейсом, чтобы он работал

0 голосов
/ 01 марта 2011
new Two() {
    Two(){}
    Two(String s) {
        System.out.println("s= "+s);
    }
};

Анонимный внутренний класс называется анонимным, потому что у него нет собственного имени, и на него нужно ссылаться по имени базового класса или интерфейса, который он расширяет / реализует.

В вашем примере вы создаете анонимный подкласс Two, поэтому Two должен быть где-то объявлен как класс или интерфейс. Если класс Два уже объявлен, у вас его нет в пути к классам или вы забыли его импортировать.

0 голосов
/ 01 марта 2011

Вы не объявили класс Two. Вы объявили класс One и закрытый член two, где two - это объект класса Two, который вы пытались инициализировать анонимной конструкцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...