存储/调用不适合定义为ENUM的值的复杂条件逻辑

时间:2013-06-02 23:56:14

标签: java

假设有一百个类描述了不同的Animals(因为有很多具有独特的行为逻辑......),还有一些类描述了Biomes

我需要一种方法来预编译所有动物类的列表,这些动物类可以在给定特定气候区或其他因素的情况下进行实例化。

目前,在我的实际应用程序中,我使用枚举列出所有“动物类型”,并使用加权随机方法返回该动物的.class

Class<? extends Animal> cl = AnimalType.random().getClass();
if( cl != null ){
    e = cl.newInstance();
    // do stuff
}

然而,枚举将不再足够,因为我需要添加几种方法来检查不同的条件。动物类可提供一系列可接受的温度,土地类型或其他条件。

我在想一个工厂类型的模式,或者只是简单地将这个逻辑保存在Animal类中(理想的)但是我a)不希望有一个纯粹用于检查这些条件的每个类的实例和b)我将它们设置为静态,但不知道是否可以在不知道类名的情况下动态调用静态方法。我需要允许将来的插件扩展动物类。

你如何建议我检查这样的逻辑?

1 个答案:

答案 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注册到某个查找表,以便稍后查询。