我对Java编译器有点困惑。为什么我不能使用通用类型来实现非通用签名
我有,有一个方法签名与“对象”的接口:
public class BeanImpl<T extends Object> implements Bean{
private T created;
public void setCreated(final T created){
this.created = (T)created;
}
}
然而,这将产生一个编译器:
public interface Bean {
public void setCreated(final Object created);
}
我想使用一个通用的实现它错误:
Name clash: The method setCreated(T) of type BeanImpl<T> has the same erasure as setCreated(Object) of type Bean but does not override it
鉴于根据定义,T
是一个Object(),为什么d编译器不允许我构造这个构造吗?试图标记它是@Override
只是产生一个错误消息,该方法实际上并未覆盖超类型。这几乎就好像编译器不理解/看到T
实际上是一个对象。
这是因为'foo(String)'不重写'foo(Object)',它** **重载**它。 – biziclop 2014-09-23 18:40:05
对。尝试在你的'setCreated()'方法上放置“@Override”注释,你会马上看到问题。 – markspace 2014-09-23 18:42:44