Java 将类对象映射到泛型对象

Java 将类对象映射到泛型对象,java,spring,generics,Java,Spring,Generics,所以我有一个抽象实体composite和一个抽象服务CompoundService 还有另一个服务类需要访问CompoundService的任何实现(任意编号,编译时实现未知)。这在1个特定方法中是必需的,并且该方法可以接受类参数class,我相信这就是您想要做的: abstract class Compound { } class Compound1 extends Compound { } abstract class CompoundService<T extends Compo

所以我有一个抽象实体
composite
和一个抽象服务
CompoundService


还有另一个服务类需要访问
CompoundService
的任何实现(任意编号,编译时实现未知)。这在1个特定方法中是必需的,并且该方法可以接受类参数
class,我相信这就是您想要做的:

abstract class Compound { }

class Compound1 extends Compound { }

abstract class CompoundService<T extends Compound> {
    ...
}

class Compound1Service extends CompoundService<Compound1> {
    ...
}

public class Test {

    static Map<Class<? extends Compound>, CompoundService<? extends Compound>> serviceMap = new HashMap<Class<? extends Compound>, CompoundService<? extends Compound>>();

    public static <T extends Compound> void main(String[] args) {
        serviceMap.put(Compound1.class, new Compound1Service());
        CompoundService<Compound1> service = getServiceFromMap(Compound1.class);
        System.out.println(service.getClass());
    }

    public static <T extends Compound> CompoundService<T> getServiceFromMap(Class<T> clazz) {
        return(CompoundService<T>)serviceMap.get(clazz);
    }

}
抽象类复合{}
类Compound1扩展了复合{}
抽象类复合服务{
...
}
类Compound1Service扩展了CompoundService{
...
}
公开课考试{
静态地图
abstract class Compound { }

class Compound1 extends Compound { }

abstract class CompoundService<T extends Compound> {
    ...
}

class Compound1Service extends CompoundService<Compound1> {
    ...
}

public class Test {

    static Map<Class<? extends Compound>, CompoundService<? extends Compound>> serviceMap = new HashMap<Class<? extends Compound>, CompoundService<? extends Compound>>();

    public static <T extends Compound> void main(String[] args) {
        serviceMap.put(Compound1.class, new Compound1Service());
        CompoundService<Compound1> service = getServiceFromMap(Compound1.class);
        System.out.println(service.getClass());
    }

    public static <T extends Compound> CompoundService<T> getServiceFromMap(Class<T> clazz) {
        return(CompoundService<T>)serviceMap.get(clazz);
    }

}