[英]Java getter return type based on object type
我想要达到的目标如下:
public class Foo {
Object o;
public Foo(Object o) { //takes object
this.o = o;
}
public <T> T getO() { //the return type of this should be the object type
return (T) o;
}
}
例如:
Object o = "123"; // imagine this comes from external system and can be anything
Foo foo = new Foo(o);
String foo = foo.getO(); //returns String
我看到一些示例使用Google Guava TypeToken
做类似的TypeToken
但无法完全得到我想要的行为。
如果让Foo具有正确的类型,则可以执行所需的操作
public class Foo<T> {
T data;
public Foo(T d)
{
this.data = d;
}
public T getData()
{
return data;
}
}
然后,您的示例将按以下方式工作:
Foo<String> foo = new Foo<>("123"); //passing String
String foo = foo.getData(); //return String
Foo<Float> foo = new Foo<>(123f); //passing float
float foo = foo.getData(); //return float
编辑:原始问题已稍作更新。 但是,基本问题仍然是Java方法必须声明其返回类型。 如果可以通过扩展层次结构以某种方式使用covariant
返回值,则可以接近。 有示例覆盖具有不同返回类型的方法,并且可以覆盖的方法在返回类型方面有所不同 。
也可以考虑采用Factory模式来辅助该方法。 原来如此
Foo foo = FooFactory.geetFoo(originalData); // the specific foo would vary
String s = foo.getData();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.