繁体   English   中英

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

[英]Java: Get class type of return object of generic 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());
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM