2013-07-27 2 views
-2

Имеет этот интерфейс:Получение общего типа реализации класса

public interface Cloneable<T> 
{ 
    public T clone(); 
} 

И это класс реализации:

public class Clazz implements Cloneable<Clazz> 
{ 
    public Clazz clone(); 
} 

Могу ли я избежать этого ?:

implements Cloneable<Clazz> 

Это будет просто implements Cloneable. Извините за мой английский, я из России ...

+0

Вы ... нет. По крайней мере, если вы не хотите использовать Generics. –

ответ

1

Ну вы могли написать implements Cloneable, но тогда вы будете с помощью сырого типа, который обычно является плохой идеей.

Для более удобного набора текста вам лучше придерживаться того, что у вас есть.

+0

Я хочу, чтобы этот тип был тем классом, который реализует этот интерфейс. Что-то вроде: public interface Cloneable sashok724

+0

@ user1936245: Нет такой конструкции. Вы должны сделать это явно, чтобы быть безопасным по типу. –

0

Если вы не учитываете <Clazz>, то он обрабатывается так, как если бы вы использовали <Object>.

Если это приемлемо, то идите на это. Не рекомендуется, хотя вы действительно хотите потерять часть своего типа безопасности.

Не было Java Puzzlers, который упомянул об этом ... Я не могу найти его.

Найдено here. Перейдите примерно в 38:00, где они обсуждают тип Glommer.

Jon is correct - Необработанные типы - это не то же самое, что и <Object>, и они являются страшно.

+0

Необработанные типы - это не то же самое, что просто использовать '' - интерфейс * whole * стирается даже для общих типов, которые не имеют никакого отношения к рассматриваемому параметру. Сырые типы страшны. –

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