在Java中泛型的新的ish,但如何在運行時編譯返回類型,這可能嗎? 我有一個類作爲實體上的裝飾器,如果實體屬性是「映射」的,那麼返回一個不同的值,但是實體屬性的值可以是任何類型。Java - 返回類型的通用類型
我的代碼如下:顯然GENERIC_TYPE是我想知道的類型,也可以是一個通配符
package com.example;
public final class ObjectPropertyGetter
{
private final Map mappings;
public ObjectPropertyGetter(Map<String, GENERIC_TYPE> mappings)
{
this.mappings = mappings;
}
public GENERIC_TYPE getValueFor(Object entity, String property)
{
GENERIC_TYPE valueOfProperty = getValueOfProperty(property); // left out for simplicity
if (mappings.containsKey(property)) {
return mappings.get(property);
}
return valueOfProperty;
}
public class MyEntity{
public String foo;
public Integer bar;
}
public static void main(String[] args)
{
Map<String, GENERIC_TYPE> mappings = new HashMap();
mappings.put("bar", 3);
MyEntity entity = new MyEntity();
entity.foo = "a";
entity.bar = 2;
ObjectPropertyGetter propGetter = new ObjectPropertyGetter(mappings);
String foo = propGetter.getValueFor(entity, "foo"); // equals "a"
Integer bar = propGetter.getValueFor(entity, "bar"); // equal 3
}
}
返回類型(或任何Java類型)是編譯時的事情。我會說使用'Object',你有'GENERIC_TYPE'並且將返回類型轉換爲你所需要的。您可以使用通用演員來隱藏演員陣列,但這並不安全,並且會明確手動演出演員陣容。 –
您還應該閱讀[原始類型,以及爲什麼您不應該使用它們](http://stackoverflow.com/q/2770321/3788176)。 –
是的,你有什麼映射?類或POJO? – efekctive