Java:获取 class 类型的 return 通用供应商对象
Java: Get class type of return object of generic supplier
假设给出了以下定义:
final Supplier<MyClass> supplier = MyClass::new;
有没有一种方法我可以在不实际调用供应商的 .get()
的情况下获得 MyClass.class
?
为什么?我必须知道指定的 class 才能做出一些合乎逻辑的决定。基于此,我可能需要在 MyClass
中找到另一个构造函数,它有一个参数,而我对目标 class 的唯一了解是这种类型的供应商。当然,我可以只调用 .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());
}
}
假设给出了以下定义:
final Supplier<MyClass> supplier = MyClass::new;
有没有一种方法我可以在不实际调用供应商的 .get()
的情况下获得 MyClass.class
?
为什么?我必须知道指定的 class 才能做出一些合乎逻辑的决定。基于此,我可能需要在 MyClass
中找到另一个构造函数,它有一个参数,而我对目标 class 的唯一了解是这种类型的供应商。当然,我可以只调用 .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());
}
}