簡體   English   中英

基於對象類型的Java getter返回類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM