Im neuen ish zu Generics in Java, aber wie kann ein Rückgabetyp zur Laufzeit kompiliert werden, ist das möglich? Ich habe eine Klasse, die als Dekorator für eine Entität fungiert, wenn die Entitätseigenschaft "zugeordnet" ist, dann wird ein anderer Wert zurückgegeben, der Wert aus der Eigenschaft der Entität kann jedoch ein beliebiger Typ sein.Java - Rückgabetyp des generischen Typs
Mein Code ist wie folgt: Offensichtlich GENERIC_TYPE die Art ich will, ist wissen, oder kann eine Wildcard
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
}
}
Ein Rückgabetyp (oder jeder Java-Typ) ist eine Kompilierungszeit Sache. Ich würde sagen, verwenden Sie "Object", wo Sie 'GENERIC_TYPE' haben und den Rückgabetyp zu dem, was Sie benötigen. Sie können den Cast mit einem generischen Cast ausblenden, aber das ist nicht sicherer und das manuelle Casting zeigt explizit an, dass ein Cast stattfindet. –
Sie sollten auch über [rohe Typen lesen, und warum sollten Sie sie nicht verwenden] (http://stackoverflow.com/q/2770321/3788176). –
Ja, was hast du in Mappings? Klasse oder POJO? – efekctive