带有 Class<?> 参数的 ObjectFactory

ObjectFactory with Class<?> argument

我正在开发一个可以使用 Class 参数实例化 Ability 类型对象的工厂。这个工厂的代码是:

public static final class AbilityFactory {
    private AbilityFactory(){}

    public static <T extends Class<A>, A extends Ability> A getAbility(T clazz){
        A ability = null;
        try{
            ability = clazz.newInstance();
        } catch(InstantiationException | IllegalAccessException ex){
            ex.printStackTrace();
        }
        return ability;
    }
}

客户端代码是这样的:

Ability.AbilityFactory.getAbility(Firebolt.class));

我认为这个设计的唯一问题是能力 class 是 抽象的 你可以传递这样的东西:

Ability.AbilityFactory.getAbility(Ability.class)); 

这导致 java.lang.InstantiationException

我想知道我是否可以做一些限制,比如“?扩展能力而不是能力”,或者这只是一个糟糕的设计,我应该将枚举作为参数传递到工厂方法中以防止这种情况发生。

你唯一能做的就是提供一个标记界面,比方说 ConcreteAbility 并有 <T extends Ability & ConcreteAbility>。然后你需要实现具有所有具体能力的 ConcreteAbility。