java - 具有泛型返回类型的静态方法
问题描述
我正在尝试定义一个可以返回特定类的子类的静态方法。我正在使用泛型,因为它不起作用。
示例代码:
public class Test {
class A {
}
class B extends A {
}
public static <T extends A> T getA() {
return new B();
}
public static void main(String[] args) {
B b = getA();
}
}
如您所见,我所说getA()
的将返回 T ,它是“A”类的孩子。我在那里返回 B 实例,它是 A 的孩子,但仍然没有编译。知道我做错了什么吗?提前致谢!
编辑:并且会有多种子类型可以返回getA()
public class Test {
class A {
}
class B extends A {
}
class C extends A {
}
public static <T extends A> T getA(int type) {
if(type = 0) {
return new B();
} else {
return new C();
}
}
public static void main(String[] args) {
B b = getA(0);
C c = getA(1);
}
}
解决方案
如您所见,我所说
getA()
的将返回 T ,它是“A”类的孩子。
是的,但是您允许调用者说出他们想要返回的子类。A
如果你写了,但不是的子类型在X x = getA();
哪里?X
A
B
唯一可以安全地从该方法返回的是null
.
如果您想说该方法将返回的任何子类型A
,请设置返回类型A
。
推荐阅读
- reactjs - 在 Yup Schema 中针对不同形状对象的子对象验证子对象
- python-3.x - 无法从我的 python 脚本接收电子邮件
- python-3.x - 每当python中的线程内出现异常时,如何终止作业(即停止主线程)?
- angular - TypeScript 没有将解析的路径添加到自定义 Angular 库 .d.ts 文件中
- spring - 无法从 Restcontroller 返回页面
- android - willpopscope, 返回类型 'Future
'不是'未来 ' - python - FastAPI 如何根据用户查询参数控制响应的字段,例如 FastAPI 中的 fieldSet?
- special-characters - 带有#的Angular文件保护程序下载csv数据无法下载
- node.js - nodejs api中的并发请求问题:100个请求参加比赛有1个空缺
- arrays - 为什么 atoi() 在此代码中的第一次调用时返回 0?