Как я могу получить тип возвращаемого значения лямбда-метода в Java?JAVA

Программисты JAVA общаются здесь
Anonymous
Как я могу получить тип возвращаемого значения лямбда-метода в Java?

Сообщение Anonymous »

Я пытаюсь получить класс универсального типа в своем Java-коде. Я использую FastJSON от Alibaba для обработки JSON. Ниже приведены ключевые части моего кода:
Вызывающий:

Код: Выделить всё

public Features findFeatureById(BigDecimal id) {
return mixedCacheService.get(FEATURE, id.toString(), new MixedCacheService.Func(() -> featuresDao.selectById(id)));
}
Вызываемый:

Код: Выделить всё

public  T get(@NotNull CacheBaseConstants cacheBaseConstants, @NotNull String key, @NotNull Supplier getter) {
String value = get(cacheBaseConstants, key);
if ("".equals(value)) {
return null;
}
// How can I get T.class here?
return Optional.ofNullable(value)
.map(o -> JSON.parseObject(value, T.class))
.orElseGet(() -> put(cacheBaseConstants, key, getter));
}
Я попытался расширить com.alibaba.fastjson.TypeReference:

Код: Выделить всё

public static class Func extends TypeReference {
private Supplier supplier;

public Func(Supplier supplier) {
super();
this.supplier = supplier;
}

public T get() {
return supplier.get();
}
}
Я также пытался использовать getter.supplier.getClass().getGenericSuperclass(), но он вернул объект.

рецепт

Код: Выделить всё

import cn.hutool.core.lang.TypeReference;

import java.util.function.Supplier;

public abstract class SupplierProxy extends TypeReference {
private final Supplier supplier;

public SupplierProxy(Supplier supplier) {
super();
this.supplier = supplier;
}

public T get() {
return supplier.get();
}

}
Юнит-тест

Код: Выделить всё

   @Test
public void get() {
Features actual = new Features();
actual.setName("123");
assertEquals(actual,mixedCacheService.get(FEATURE_BY_KEY, "1", new SupplierProxy(() -> actual) {
}));
assertEquals( actual,mixedCacheService.get(FEATURE_BY_KEY, "1", new SupplierProxy(() -> actual) {
}));
}
Спасибо всем за ответы, они меня вдохновили

Подробнее здесь: https://stackoverflow.com/questions/790 ... od-in-java

Вернуться в «JAVA»