如何在不导致类型不匹配的情况下,将类型Object
从方法返回到未知类型?
答案 0 :(得分:1)
您可以使用Generics推断返回类型,如下所示:
public <T> T methodX() {
return (T) someValue; //Note that you should ensure that this cast succeeds or catch the possible ClassCastException here
}
//call it like this:
String s = methodX();
请注意,您需要确保可以转换为推断类型,因此您可能希望将Class<T>
作为参数传递,以便检查T
的类型。
如果您实际上返回其通用参数为T
的通用对象,则仅从赋值中推断T
的类型可能会有所帮助。例如,请查看Collections.emptyList()
,它返回一个空的List<T>
(因此列表中没有任何类型为T
的元素)。
您还可以为T
类型设置界限:
public <T extends Number> T methodX() {
return (T) someValue;
}
//would compile
Integer i = methodX();
//this would not compile, since s is not a number
String s = methodX();
答案 1 :(得分:0)
如果您尝试执行类似String str = new Object()
的操作,则会出现类型不匹配。
如果您知道该方法返回,请说出String
,即,如果它看起来像
public Object yourMethod() {
return "Hello World";
}
然后你可以在呼叫端转换结果,如下所示:
String result = (String) yourMethod();
(如果yourMethod
不实际返回String
,那么您将获得ClassCastException
!)
如果您将方法声明为
public String yourMethod() {
...
}
然后你无法返回Object
,你必须返回String
。