java - 从通用类型参数中检索高级信息

标签 java generics

我想知道 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/

相关文章:

java - 不重复随机数

java - 最小化 Java 中的垃圾收集尝试(示例)

java - Derby:批量导入未设置 AUTO_INCRMENT

java - Map 的类型安全合并,其值具有多种类型; `incompatible types java.lang.Object cannot be converted to capture#1 of ?`

java - Java中的可序列化和可外部化有什么区别?

来自通用抽象类的 C# 线程静态字段

c# - 使用实现所需返回类型的返回类型实现接口(interface)

java - 通用接口(interface): list of something specific

Java - 对多种类型使用泛型

java - 使用 PDFBox 添加页面不起作用