Im new ish to Generics в Java, но как можно скомпилировать тип возвращаемого значения во время выполнения, возможно ли это? У меня есть класс, который действует как декоратор над сущностью, если свойство объекта «отображается», тогда возвращается другое значение, однако значение из свойства объекта может быть любым типом.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