gpt4 book ai didi

java - Java中如何将泛型类型转换为具体类型

转载 作者:行者123 更新时间:2023-12-01 22:04:56 26 4
gpt4 key购买 nike

您好,我目前正在处理一些我继承的遗留代码,我需要将一种类型转换为另一种类型以结束我的重构。我遇到的问题是我有一个返回 Class<AbstractSuperClass> 的对象但我需要将其转换为 AbstractSuperClass //(concrete object although abstract)

我尝试做的是使用枚举常量来表示抽象类的具体子类,然后使用常量来实例化对象。但迄今为止我所有的选角尝试都失败了。

如果有人可以针对这种情况提供一些正确方向的指导,那将是非常有帮助的。

最佳答案

你的问题不完全清楚。看起来您正在尝试使用枚举常量来表示抽象类的具体子类,并且您希望能够使用这些常量来实例化对象。这是可能的:

public enum ConcreteClass {

CONCRETE1(Concrete1.class),
CONCRETE2(Concrete2.class);

private final Class<? extends AbstractClass> clazz;

private ConcreteClass(Class<? extends AbstractClass> clazz) {
this.clazz = clazz;
}

public AbstractClass instantiate() throws InstantiationException, IllegalAccessException {
return clazz.newInstance();
}
}

有了这个你可以做AbstractClass obj = ConcreteClass.CONCRETE2.instantiate(); 。您必须在 try 中执行此操作。阻止,因为这些异常是检查异常。

我个人不喜欢为此使用反射。我认为使用 Supplier<AbstractClass>更好(需要 Java 8):

public enum ConcreteClass {

CONCRETE1(Concrete1::new),
CONCRETE2(Concrete2::new);

private final Supplier<AbstractClass> supplier;

private ConcreteClass(Supplier<AbstractClass> supplier) {
this.supplier = supplier;
}

public AbstractClass instantiate(){
return supplier.get();
}
}

这种方法不使用反射,不涉及检查异常,并且更通用,因为它可以与仅具有静态工厂方法而没有公共(public)构造函数的类一起使用。

关于java - Java中如何将泛型类型转换为具体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32958604/

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