3

我想知道实现这一目标的最吸引人的方式是什么。

我有一个黑匣子。我给它 a supported type,它会返回一个基于类型的随机值。

对于我支持的类型,我enum定义如下:

public enum Types 
{
    INTEGER,
    DOUBLE,
    BIGINTEGER,
    BIGDECIMAL,
    STRING,
    BOOLEAN,
    CHAR
}

我认为最简单的方法是创建一个静态函数,该函数根据Type

public static Object getRandomValue(Types type)
{
    switch(type)
    {
        case INTEGER:
            return randomInt();
        case DOUBLE:
            return randomDouble();
        case BIGINTEGER:
            return randomBigInt();
        case BIGDECIMAL:
            return randomBigDecimal();
        case STRING:
            return randomString();
        case BOOLEAN:
            return randomBool();
        case CHAR:
            return randomChar();
    }
}

问题是每次我想基于此方法检索随机值时都必须进行额外的转换。

我已经研究了设计模式abstract factoryfactory,但我无法确定实现其中任何一个是否有优势。或者,如果有一种不同的设计模式似乎更合适。

假设我的所有random方法都已定义。

这是客户端的示例:

public abstract class MyClass<T>
{
    protected T t;
}

public class MyIntClass extends MyClass<Integer>
{
    public MyIntClass()
    {
        t = getRandomValue(Types.Integer);
    }
}
4

1 回答 1

3

像这样的东西怎么样:

public <T> T getRandom(Class<? super T> type);

您可以将类型映射到enum或使用Map<Class<?>, Supplier<?>>. 我会使用地图,因为代码就是:

public <T> T getRandom(Class<? super T> type){
   return (T) myMap.get(Type).get();
}

您可能必须做一些递归工作以允许允许的super方面intInteger使用相同的供应商。

于 2013-09-12T14:48:19.467 回答