我想知道Java 12中是否有可能在通用类型参数上调用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();
}
答案 0 :(得分:0)
一个简单的解决方案是在函数Class<T>
中添加一个参数,就像这样:
generic(optionalOfInteger, Integer.class, 0)
,例如
您可能可以使用的另一种方法涉及利用反射,该方法在此处记录:Get type of a generic parameter in Java with reflection
但是请记住,基于反射的方法可能会很慢。
答案 1 :(得分:0)
使用会更好
class Task {
Name _name;
}
class Name with ChangeNotifier {
String _name;
}
这样,您的方法的用户将不得不提供他想要获取的实体的类?