3

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

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

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

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

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

我正在考虑一种工厂类型的模式,或者只是将这种逻辑保留在 Animal 类本身(理想)中,但我 a)不希望每个类都有一个纯粹用于检查这些条件的实例,并且 b)我会使它们成为静态的,但不知道是否可以在不知道类名的情况下动态调用静态方法。我需要允许未来的插件来扩展动物类。

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

4

1 回答 1

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

于 2013-06-03T02:26:47.213 回答