假设有一百个类描述了不同的Animals
(因为有很多具有独特的行为逻辑......),还有一些类描述了Biomes
。
我需要一种方法来预编译所有动物类的列表,这些动物类可以在给定特定气候区或其他因素的情况下进行实例化。
目前,在我的实际应用程序中,我使用枚举列出所有“动物类型”,并使用加权随机方法返回该动物的.class
。
Class<? extends Animal> cl = AnimalType.random().getClass();
if( cl != null ){
e = cl.newInstance();
// do stuff
}
然而,枚举将不再足够,因为我需要添加几种方法来检查不同的条件。动物类可提供一系列可接受的温度,土地类型或其他条件。
我在想一个工厂类型的模式,或者只是简单地将这个逻辑保存在Animal类中(理想的)但是我a)不希望有一个纯粹用于检查这些条件的每个类的实例和b)我将它们设置为静态,但不知道是否可以在不知道类名的情况下动态调用静态方法。我需要允许将来的插件扩展动物类。
你如何建议我检查这样的逻辑?
答案 0 :(得分:0)
也许你可以有一个存储这些元信息的类。
public class Meta
Class<? extends Animal> clazz;
boolean hairy;
// etc
public class Animal
public abstract Meta getMeta();
class Cat extends Animal
public static Meta META = new Meta(Cat.class, true, ...);
public Meta getMeta(){ return META; }
Meta构造函数需要将this
注册到某个查找表,以便稍后查询。