2013-08-16 6 views
-1
Class A{ 

public void test(){ 
    B b = new B(); 
    System.out.println("Class Name: " + b.createClassC().getClass()); 
} 

} 

Class B{ 
    public C createClassC(){ 
    C c = new C(){ 
     @Override 
     public boolean equals(Object other){ 
     return true; 
     }  
    }; 
    } 
} 

Class C{ 
    int val = 8; 
} 

: Название Класс: package.name.here .BИмя класса для Java анонимного класса Output

Может кто-нибудь сказать мне, почему анонимные типы классов дает класс ограждающую в GetClass (метод) ? Это приводит к тому, что .equals() на объекте C терпит неудачу все время. Насколько я понимаю, поскольку getClass предоставляет имя класса, переопределенное равное никогда не вызывается?

+3

Это ** не **, что он выводит. Он выводит 'package.name.here.B $ 1'' $ 1' означает, что это анонимный класс. Dup: http://stackoverflow.com/questions/7172581/why-getclass-returns-the-name-of-the-class-1-or –

+0

@jahroy Это делает как [SSCCE] (http: // sscce. орг /). Проблема в том, что предполагаемый вывод не является тем, что фактически выводится. –

ответ

1

вывод Class Name: class nz.test.anon.B$1 знак доллара важен. B $ 1 означает первый анонимный класс под B. B $ 2 - второй и так далее.

также метод равно вызывается

System.out.println("This is true: " + b.createClassC().equals(b)); 
System.out.println("and so is this: " + b.createClassC().equals(this)); 
+0

Вы знаете официальную ссылку, в которой четко указано название анонимных классов? –

0

Не знаю, как вы работаете вам код. Следует отметить следующие моменты:

  • Первый, если все, где основной() метод? Как начинается ваша программа? Там должен быть один

public static void main(String args[])

метод в вашем проекте.

  • Во-вторых видеть ваш метод

    общественности C createClassC() { Сс = новый C() { @Override общественные булевы Equals (Object другой) { возвращает истину; }
    }; }

Функция подписи диктует она должна возвращать объект класса C (или его подкласс), но я не вижу такого оператора возврата. Вы должны return c;

Наконец, вывод вашего кода: Class Name: class nz.test.anon.B$1, в котором B $ 1 означает анонимный класс.

 Смежные вопросы

  • Нет связанных вопросов^_^