gpt4 book ai didi

Java 泛型使用反射从方法(创建对象)获取类型

转载 作者:行者123 更新时间:2023-12-02 00:06:57 24 4
gpt4 key购买 nike

我想创建一个 GenericBuilder,它可用于检索在我的类中定义的 Builder 类。我创建了以下接口(interface)和类

public interface BuilderType<T> {
}

public class MyObject implements BuilderType<MyObject.MyObjectBuilder> {
private int i;
private MyObject() {}
public int getI() {
return i;
}
public static MyObjectBuilder buildMyObject() {
MyObjectBuilder builder = new MyObjectBuilder();
return builder;
}
public static class MyObjectBuilder {
private final MyObject obj;
MyObjectBuilder() {
obj = new MyObject();
}
public MyObjectBuilder withI(int i) {
obj.i = i;
return this;
}
public MyObject build() {
return obj;
}
}
public class GenericBuilder {
public static <T extends BuilderType<S>, S> S getBuilder(Class<T> t) {
S s = null;
try {
s = (S) t.getDeclaredMethod("build" + t.getSimpleName(), null)
.invoke(null, null);
} catch (Exception e) {
e.printStackTrace();
}
return s;
}
}

我的 GenericBuilder 中的语句 s=(S)t.get... 给出了强制转换警告:Unchecked Cast from Object to S,有办法消除它吗?

最佳答案

无法消除该警告,因为 S 不是真实类型。到运行时,它将被删除到其上限,在您的情况下是 Object 。所以“沮丧”实际上并没有做任何事情。您可以通过调用适当的方法来检查Method的返回类型,然后进行反射向下转换(对您的场景没有太大帮助)。当您在运行时动态获取方法时,不可能实现类型安全。

关于Java 泛型使用反射从方法(创建对象)获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com