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型)はコンパイル時のものです。私は 'GENERIC_TYPE'を持っているところで' Object'を使い、必要なものに戻り型をキャストします。あなたはジェネリックキャストでキャストを隠すことができますが、これはもっと安全ではなく、手動キャスティングでキャストが起こっていることが明示的に示されます。 –
また、[未処理の種類、およびそれらを使用しない理由](http://stackoverflow.com/q/2770321/3788176)も参照する必要があります。 –
はい、マッピングには何がありますか?クラスやPOJO? – efekctive