如何在不导致类型不匹配的情况下将类型Object
从方法返回到未知类型?如何在不导致类型不匹配的情况下返回“对象”类型的对象
-3
A
回答
1
你可以使用泛型来推断返回类型,就像这样:
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();
0
如果您尝试执行类似String str = new Object()
的操作,则会出现类型不匹配。
如果你知道这个方法返回,说String
,也就是说,如果它看起来像
public Object yourMethod() {
return "Hello World";
}
,那么你可以投在呼叫侧的结果,就像这样:
String result = (String) yourMethod();
(如果不不实际上返回String
,你会得到一个ClassCastException
!)
如果你已经声明为
public String yourMethod() {
...
}
的方法,那么你无法返回Object
,你必须返回一个String
。
+0
我使用泛型,所以我不知道我返回的是什么类型。有没有办法将Object类型返回到原始类型? – Graham
相关问题
- 1. Java - 在编译时如何在不知道结果类型的情况下返回变量类型对象?
- 2. 如何在不启动对象的情况下获取类的类型?
- 3. 对象与SetValue使用类型不匹配的目标类型
- 4. 类型的对象与目标类型不匹配'Xamarin.Forms.ContentView'
- 5. 返回类型对象
- 6. 返回对象类型C
- 7. 如何在不创建副本的情况下返回对象?
- 8. pandas.read_sql返回系列对象类型而不是sql类型
- 9. C++:从类中返回模板对象,模板类型不匹配?
- 10. 函数的返回类型不匹配的现象范围
- 11. 在Box2d碰撞对象类型的情况下,可变身体类型?
- 12. 如何在没有实例化对象的情况下建立Java类类型?
- 13. Java的面向对象的情况下对象类型的答案
- 14. 返回子类对象的泛型getter
- 15. ObjectForID返回什么类型的对象
- 16. Java:返回对象的检测类型
- 17. 返回类型对象的方法
- 18. 在对象工厂的类型不匹配
- 19. TakeWhile导致类型不匹配
- 20. C#在不知道类型的情况下获取对象的名称
- 21. 在.NET interop中传递vb6对象类型参数byref会导致类型不匹配
- 22. 类型不匹配:不能从元素类型对象转换为int
- 23. Java 8流:类型不匹配不能转换流对象或列表对象
- 24. 如何在不提及派生类名的情况下返回接口类型?
- 25. “类型'对象'是不可分配类型”与新的HttpClient/HttpGetModule
- 26. 找不到对象类型
- 27. 'com.google.gwt.dev.shell.jetty.JettyLauncher.WebAppContextWithReload'类的对象不是'org.eclipse.jetty.webapp.WebAppContext'类型的对象
- 28. 抽象类型基类的返回列表对象
- 29. NHibernate的fetchmany对象与目标类型不匹配
- 30. 如何参数类型转换为不同的对象类型
你是什么意思“导致类型不匹配”?你可以发布一些示例代码来演示你的问题吗? –
如果他有一个方法声明要返回一个'Object',那么当他尝试存储方法调用的结果时,可能会发生不匹配。 – aioobe