java – 为什么我不能使用泛型类型来实现非泛型签名
发布时间:2020-12-15 04:22:36 所属栏目:Java 来源:网络整理
导读:我对 Java编译器有点困惑. 我有一个带有“Object”方法签名的接口: public interface Bean { public void setCreated(final Object created);} 我想用泛型来实现它: public class BeanImplT extends Object implements Bean{ private T created; public vo
我对
Java编译器有点困惑.
我有一个带有“Object”方法签名的接口: public interface Bean { public void setCreated(final Object created); } 我想用泛型来实现它: public class BeanImpl<T extends Object> implements Bean{ private T created; public void setCreated(final T created){ this.created = (T)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(),为什么编译器不允许我创建这个构造?试图标记它是@Override只是产生一个错误消息,该方法实际上不会覆盖超类型.几乎就像编译器不理解/看到T实际上是一个Object. 解决方法
如果允许,那么有人可能会创建
public class Child extends BeanImpl<Integer> { public void setCreated(Integer created){ // whatever } } 和 Bean bean = new Child(); bean.setCreate(new NotAnInteger()); 和类型安全会破裂.你必须满足界面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |