gpt4 book ai didi

java - 我可以用 Reflection 做的更简单。我是不是该?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:43 24 4
gpt4 key购买 nike

所以我在写游戏时遇到了一个难题,我认为反射可能是更好的解决方案。但是知道不鼓励反射并且我的其他解决方案看起来不那么漂亮,我想我会在这里问一下,看看在这种情况下实际上什么是更好的主意。

基本上我有一个抽象卡片类,并且会有它的几个实现。我有一个案例,我得到了一个卡片名称并且需要构造它的一个对象,只需给出名称即可。

我知道我可以使用:

a) 反射(reflection)并使用 forName 和 invoke。它将是非常短的代码,可以很好地扩展,并且很容易编写。也就是说,它是反射,我完全赞成在我不是特别需要它时避免它。

b) 使用工厂设计模式,然后进行巨大的条件检查,根据我提供的名称调用适当的类。编写起来并不难,但需要不断维护,编写起来需要一段时间,而且扩展性不好。也就是说,这是一种非反射解决方案。

那么理想的解决方案是什么?我使用反射只是因为它使我的代码简洁明了吗?

最佳答案

这是一个替代方案(不确定它是否是您提到的“理想解决方案”,但我认为值得考虑):枚举类型。它仍然是一个巨大的 list ,但也许更干净一些?而且你必须在某个地方定义它们。

我的意思的一个例子:

enum CardType {
CARD_ONE(new Card(arg0, arg1, arg2, ..., argN)),
CARD_TWO(new Card(arg0, arg1, arg2, ..., argN)),

...

CARD_N(new Card(arg0, arg1, arg2, ..., argN));

private final Card card;

private CardType(Card card) {
this.card = card;
}

public Card getCard() {
return card;
}
}

然后当您需要通过名称获取一个时,只需执行以下操作:

public Card getCardByName(String cardName) {
return CardType.valueOf(cardName).getCard();
}

这假设卡片是单例的,但您可以轻松地让 getCard 方法执行某种工厂逻辑来创建新卡片。

关于java - 我可以用 Reflection 做的更简单。我是不是该?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20535093/

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