[英]Usage of extends in Class, Abstract, Interface combination
我的主要问题围绕何时使用以及与Class,Abstract,Interface结合使用时以下内容之间有什么区别:
<E>
<E extends Interface>
<? extends Interface>
下面显示的是带有一些代码签名的详细问题:
此代码使用番石榴转发装饰器来定义特定的集合。
基本接口:
public interface AnimalSetInterface<E extends AnimalI> extends Set<E>
这有效:
public interface AsiaI<E extends AnimalI> extends AnimalSetInterface<E>
以下给出了一个错误:
public interface AsiaI<E> extends AnimalSetInterface<E>
绑定不匹配:类型E不是有效替代类型AnimalSetInterface的有界参数
我想了解的是,如果我在基本接口上指定了只希望<E extends AnimalI>
那么为什么必须在AsiaI
再次指定?
我试图了解泛型,同时尽量减少代码。
同样,如果两个类都有这样的代码,那么有一种很好的方法来组合/最小化(删除/生成样板代码):
亚洲:
public Asia(final ImmutableSet<E> animalSet){
super(animalSet);
}
public static <E extends AnimalI> AsiaI<E> of(final ImmutableSet<E> animalSet){
return new Asia(animalSet);
}
非洲:
public Africa(final ImmutableSet<E> animalSet){
super(animalSet);
}
public static <E extends AnimalI> AfricaI<E> of(final ImmutableSet<E> animalSet){
return new Africa(animalSet);
}
public class Africa<E extends AnimalI> extends AnimalSetAbstract implements AfricaI
public class Asia<E> extends AnimalSetAbstract implements AsiaI
区别在于,在第一种情况下,您的泛型类型必须扩展AnimalI在第二种情况下,您的泛型类型可以是任何类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.