2015-11-24 4 views
1

В Java можно ли предотвратить расширение класса анонимно?Избегайте расширения класса, анонимно расширяемого в Java

Например

public class A() { 
    public void hello() {} 
} 

Я хочу, чтобы именованный расширение класса:

public class B extends A { 
} 

но не анонимно:

A a = new A() { 
    public void hello() { 
    } 
} 

Это для сериализации цели.

+0

Нет, нет возможности предотвратить анонимное подклассов. Если вы действительно хотите решить эту проблему, не прибегая к тому, чтобы в вашей базе кода было заключено соглашение «подклассы должны быть легко сериализованы», я хотел бы предложить сделать конструктор пакета «A» частным (при необходимости создать общедоступный заводский метод) и попробовать спроектировать его так, чтобы 'B' жил в одном пакете. – aioobe

+0

Это выглядит как [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Подумайте об обновлении своего вопроса и объясните свою реальную проблему. – Pshemo

ответ

4

Java имеет ключевое слово final, которое предотвращает расширение классов вообще, но если вы специально хотите предотвратить анонимное расширение, вы ничего не можете сделать.

См. Serialization of anonymous class in Java.

+1

Связанный http://stackoverflow.com/questions/9465641/serialization-of-anonymous-class-in-java – aioobe

+0

@aioobe Спасибо, похоже, что это создает проблемы в конце концов. Я обновил вашу ссылку. –

+1

Кроме того, в вопросе явно указывается, что «класс B extends A' должен быть разрешен, что исключает« final ». Это в основном снижает ваш ответ на «[...], вы ничего не можете сделать [...]». – aioobe