gpt4 book ai didi

java - 如何使用泛型在方法中返回不同的类型?

转载 作者:行者123 更新时间:2023-11-29 08:23:33 24 4
gpt4 key购买 nike

我想在 java 中使用泛型返回不同的类类型,但是有一个错误。

这些返回值有其独特的字段,所以我不想使用它们的父类作为返回类型。

代码如下:

public class Client {
public static void main(String[] args) {
Client c = new Client();
A a = c.gets(1);
System.out.println(a.aFiled);
B b = c.gets(2);
System.out.println(b.bFiled);
}


public <T extends Root> T gets(int type) {
switch (type) {
case 1:
return new A();
case 2:
return new B();
default:
throw new RuntimeException();
}
}


class Root {
String name;
}

class A extends Root {
int aFiled;
}

class B extends Root {
int bFiled;
}
}


错误发生在switch

"incompatible types"
Required: T
Found: Client.A

我的意思是返回someclass extends Root,不知道为什么不对。
如果有人能向我解释一下,我将不胜感激。

最佳答案

在泛型方法中,编译器使用实际参数推断类型。但是您的参数没有任何类型 T。您可以发送另一个参数 Class<T>告诉返回值的类型:

public <T extends Root> T gets(int type, Class<T> c) {
switch (type) {
case 1:
return c.cast(new A());
case 2:
return c.cast(new B());
default:
throw new RuntimeException();
}
}

但是在您的情况下,您在调用此方法之前不知道类型。

因此,您所能做的就是使该方法成为非泛型方法,并将返回类型更改为 Root .然后你可以做 instanceof检查识别类,进行转换,然后获取相关字段。

无论如何,使此方法成为泛型是没有意义的,因为泛型方法可以处理不同类型的提供数据。但在你的情况下它总是一个 int .所以我会说你的方法不是真正的通用

关于java - 如何使用泛型在方法中返回不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55389681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com