[英]Can we create method with generic return type and how does this evaluate which type to return at compile time?
我看到编译器允许以下方法。 但是任何人都可以解释在编译时如何确定返回类型。T的值是什么。还可以给我提供参考文档或视频,在其中我可以进一步了解java编译器将如何在内部确定泛型类型。 。
public <T> T getValue(String abc) throws Exception {
if(abc.equals("x")){
return (T) new String[]{"x","y","z"};
} else {
return (T) "abc";
}
}
您不能一般地这样做。
最好的办法是使用非泛型方法,返回一个公共的超类-在这种情况下, Object
:
public Object getValue(String abc) throws Exception {
if(abc.equals("x")){
return new String[]{"x","y","z"};
} else {
return "abc";
}
}
这将负担加到了调用方上,以将对象转换为适当的类型,您可能会对此感到厌恶。 但是请注意,您当前的方法也可以这样做,因为没有什么可以阻止他们编写此代码:
String s = getValue("x");
String[] arr = getValue("x");
两者都很好,但是其中之一将在运行时失败。 调用者必须以某种方式知道哪个调用将返回String
,哪个调用将返回String[]
。
强迫他们进行投射的好处是,他们可以看到投射,并知道他们将必须保重。
更好的方法是在所有情况下都返回相同类型的值:而是返回new String[]{"abc"}
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.