繁体   English   中英

在类,抽象,接口组合中扩展的用法

[英]Usage of extends in Class, Abstract, Interface combination

我的主要问题围绕何时使用以及与Class,Abstract,Interface结合使用时以下内容之间有什么区别:

  1. <E>

  2. <E extends Interface>

  3. <? 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM