有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

假设给出了以下定义:

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

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

为什么??我必须知道指定的类才能做出一些逻辑决策。基于此,我可能需要在MyClass中找到另一个构造函数,它有一个参数,并且我对目标类的唯一了解是这种类型的提供者。当然,我可以调用.get()并从那里开始,如下所示:

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

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


共 (1) 个答案

  1. # 1 楼答案

    你可以像下面这样做。有必要添加番石榴作为依赖项

    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());
      }
    }