Java:获取通用供应商返回对象的类类型

标签 java generics reflection supplier

假设给出了以下定义:

final Supplier<MyClass> supplier = MyClass::new;

有没有办法在不实际调用供应商上的 .get() 的情况下获取 MyClass.class

为什么?我必须知道指定的类才能做出一些合乎逻辑的决定。基于此,我可能需要在 MyClass 中找到另一个构造函数,它有一个参数,而我对目标类的唯一了解是这种类型的供应商。当然,我可以只调用 .get() 然后从那里开始,就像这样:

final MyClass obj = supplier.get().getClass().getConstructor(MyParameter.class).newInstance(..);

但是在执行我的中间步骤之前使用它可能会导致不必要的对象创建

最佳答案

您可以执行如下操作。需要添加Guava作为依赖。

import java.lang.reflect.Type;
import java.util.function.Supplier;

import com.google.common.reflect.TypeToken;

public abstract class MySupplier<T> implements Supplier<T> {

  private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) { };
  private final Type type = typeToken.getType();

  public Type getType() {
    return type;
  }
}

public class Test {

  public static void main(String[] args) {

    Supplier<String> supplier = new MySupplier<String>() {
      @Override
      public String get() {
        return new String();
      }
    };
    System.out.println(((MySupplier) supplier).getType());
  }
}

关于Java:获取通用供应商返回对象的类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52512327/

相关文章:

java - 如何使用外键创建持久类

java - Spring Boot PostgreSQL JPA @Query 似乎不起作用

Swift 编译器无法解决泛型的递归使用

c# - Dynamically Flat C# object class 运行时的属性列表

java - 什么是 Java 对 Ruby 单例的等价物

java - JUnit 测试没有达到预期效果

c# - 通用方法和无效上下文异常

java - Java 如何处理泛型的模糊类型推断?

java - 使用反射访问父类(super class)的隐藏字段

c# - 优化获取 "get_Item"MethodInfo的方式