我的主要问题围绕何时使用以及与Class,Abstract,Interface结合使用时的以下区别:
<E>
<E extends Interface>
<? extends Interface>
下面显示的是一些代码签名的详细问题:
此代码使用Guava Forwarding Decorators来定义特定的集合。
基础界面:
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
类型的参数
我想要了解的是,如果我在Base Interface中指定我只需要<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);
}
答案 0 :(得分:3)
public class Africa<E extends AnimalI> extends AnimalSetAbstract implements AfricaI
public class Asia<E> extends AnimalSetAbstract implements AsiaI
不同之处在于,在第一种情况下,您的泛型类型必须扩展AnimalI 在第二种情况下,您的泛型类型可以是任何类。