如何在不导致类型不匹配的情况下返回“对象”类型的对象

时间:2011-10-10 08:23:34

标签: java

如何在不导致类型不匹配的情况下,将类型Object从方法返回到未知类型?

2 个答案:

答案 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