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

如何在Java中将泛型类型转换为具体类型,java,generics,Java,Generics,您好,我目前正在处理一些继承的遗留代码,我需要将一种类型转换为另一种类型以结束重构。 我遇到的问题是,我有一个返回类的对象,但我需要将其转换为抽象超类//(虽然是抽象的具体对象) 我尝试使用enum常量来表示抽象类的具体子类,然后使用这些常量来实例化对象。但到目前为止,我所有的铸造尝试都失败了 如果有人能为这种情况提供一些正确的方向,那将非常有帮助。你的问题并不完全清楚。看起来您正试图使用枚举常量来表示抽象类的具体子类,并且希望能够使用这些常量来实例化对象。这是可能的: public enum

您好,我目前正在处理一些继承的遗留代码,我需要将一种类型转换为另一种类型以结束重构。 我遇到的问题是,我有一个返回
类的对象,但我需要将其转换为
抽象超类//(虽然是抽象的具体对象)

我尝试使用enum常量来表示抽象类的具体子类,然后使用这些常量来实例化对象。但到目前为止,我所有的铸造尝试都失败了


如果有人能为这种情况提供一些正确的方向,那将非常有帮助。

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

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

这种方法不使用反射,不涉及已检查的异常,并且更通用,因为它可以用于只有静态工厂方法且没有公共构造函数的类。

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

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

这种方法不使用反射,不涉及已检查的异常,并且更通用,因为它可以用于只有静态工厂方法且没有公共构造函数的类。

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

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

这种方法不使用反射,不涉及已检查的异常,并且更通用,因为它可以用于只有静态工厂方法且没有公共构造函数的类。

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

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


这种方法不使用反射,不涉及已检查的异常,并且更通用,因为它可以用于只有静态工厂方法且没有公共构造函数的类。

A
Class
对象不是
AbstractSuperClass
对象。铸造永远不会成功。请澄清您正在做或试图做什么。您好,谢谢您的快速回答,我尝试做的是通过enum(ENUMVAL(baseClassFoo.Class))返回一个类如果我能成功地将这个返回类型转换成我在另一个方法中拥有的抽象类,我就可以消除大量冗余代码,并使用baseClassFoo中定义的算法,而不必使用动态分派检查条件。你是在问如何实例化一个类的
class
对象吗?(通过反射?@AndyTurner)我希望抽象只是为了泛型界,他们实际上为枚举参数(或其他任何参数)提供了具体的类。是的,我认为这就是我要寻找的,如果这能实现我在上面的问题中所描述的,例如,返回类型类的枚举值,然后实例化一个AbstractSuperClass类。(基本上我返回类型类类型的枚举值,但我希望使用这些枚举值来实例化另一个类中的抽象超类,以便在那里使用动态分派)@Sotirios是的,就是这样:)一个
Class
对象不是
AbstractSuperClass
对象。铸造永远不会成功。请澄清您正在做或试图做什么。您好,谢谢您的快速回答,我尝试做的是通过enum(ENUMVAL(baseClassFoo.Class))返回一个类如果我能成功地将这个返回类型转换成我在另一个方法中拥有的抽象类,我就可以消除大量冗余代码,并使用baseClassFoo中定义的算法,而不必使用动态分派检查条件。你是在问如何实例化一个类的
class
对象吗?(通过反射?@AndyTurner)我希望抽象只是为了泛型界,他们实际上为枚举参数(或其他任何参数)提供了具体的类。是的,我认为这就是我要寻找的,如果这能实现我在上面的问题中所描述的,例如,返回类型类的枚举值,然后实例化一个AbstractSuperClass类。(基本上我返回类型类类型的枚举值,但我希望使用这些枚举值来实例化另一个类中的抽象超类,以便在那里使用动态分派)@Sotirios是的,就是这样:)一个
Class
对象不是
AbstractSuperClass
对象。铸造永远不会成功。请澄清您正在做或试图做什么。您好,谢谢您的快速回答,我尝试做的是通过enum(ENUMVAL(baseClassFoo.Class))返回一个类如果我能成功地将这个返回类型转换成我在另一个方法中拥有的抽象类,我就可以消除大量冗余代码,并使用baseClassFoo中定义的算法,而不必使用动态分派检查条件。你是在问如何实例化一个类的
class
对象吗?(通过反射?@AndyTurner)我希望抽象只是为了泛型界,他们实际上为枚举参数(或其他任何参数)提供了具体的类。是的,我认为这就是我要寻找的,如果这能实现我在上面的问题中所描述的,例如,返回类型类的枚举值,然后实例化一个AbstractSuperClass类。(基本上,我返回类型类类型的枚举值,但