gpt4 book ai didi

java - 带有 Class 参数的 ObjectFactory

转载 作者:行者123 更新时间:2023-11-30 03:34:17 37 4
gpt4 key购买 nike

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

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

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

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

这会导致java.lang.InstantiationException

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

最佳答案

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

关于java - 带有 Class<?> 参数的 ObjectFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28348252/

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