我想知道 Java 12(至少需要 Java 8)是否有可能调用 T.class
在泛型类型参数上,或者是否有一些解决方法?
由于我反对一遍又一遍地重写相同的代码逻辑,所以我对调用 T.class
感到好奇。将任何类型的 Java 对象传递给我的方法并编写一些映射功能来处理 Optional<T>
展开逻辑。
public SpecificEntity specific(final Long id) throws EntityNotFoundException {
final Optional<SpecificEntity> optional = this.specificEntityRepository.findById(id);
if (optional.isEmpty()) {
throw new EntityNotFoundException(SpecificEntity.class, "id", id.toString());
}
return optional.get();
}
我希望可以像这样重写上面的代码:
public <T> T generic(final Optional<T> optional, final Long id) throws EntityNotFoundException {
if (optional.isEmpty()) {
throw new EntityNotFoundException(T.class, "id", id.toString());
}
return optional.get();
}
最佳答案
一个简单的解决方案是向函数添加一个参数 Class<T>
,你可以这样调用它:
generic(optionalOfInteger, Integer.class, 0)
,举个例子
您可以使用的另一种方法涉及利用反射,记录如下:Get type of a generic parameter in Java with reflection
但是,请记住,基于反射的方法可能会非常慢。
关于java - 从通用类型参数中检索高级信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57043656/