首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型的Java泛型

泛型的Java泛型
EN

Stack Overflow用户
提问于 2014-09-07 22:36:43
回答 1查看 95关注 0票数 3

我有一个接口:

代码语言:javascript
复制
public interface Human<D extends Details> {
    D getDetails();
}

和一个具体的实现:

代码语言:javascript
复制
public class Man implements Human<ManDetails> {
    ManDetails getDetails();
}

我想以这样的方式扩展Man,这样我就可以做一些类似的事情:

代码语言:javascript
复制
public class Baby extends Man {
    BabyDetails getDetails();
}

所以基本上我在寻找一种方法,这样人就可以是具体的(我可以自己使用它),同时也是一个泛型,这样其他人就可以扩展它(例如,baby的getDetails()将获得super.getDetails()并从中创建一个新的BabyDetails实例)。

EN

回答 1

Stack Overflow用户

发布于 2014-09-07 22:43:02

您可以考虑将代码更改为

代码语言:javascript
复制
class Man<T extends ManDetails> implements Human<T> {
    public T getDetails(){return null;}
}

这会让你做一些像这样的事情

代码语言:javascript
复制
class Baby extends Man<BabyDetails> {
    public BabyDetails getDetails(){...}
}

代码语言:javascript
复制
class Baby<T extends BabyDetails> extends Man<T> {
    public T getDetails(){...}
}

但是作为Sotirios Delimanolis already mentioned,你所做的已经很好了

代码语言:javascript
复制
public class Baby extends Man {
    public BabyDetails getDetails(){...}
}

因为重写方法可以声明新的返回类型,只要此类型是在重写方法中声明的返回类型的子类型,例如

代码语言:javascript
复制
List<String> method()

可以被重写为

代码语言:javascript
复制
ArrayList<String> method();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25711332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档