Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据类型检索随机值的方法_Java_Design Patterns - Fatal编程技术网

Java 根据类型检索随机值的方法

Java 根据类型检索随机值的方法,java,design-patterns,Java,Design Patterns,我想知道实现这个目标最吸引人的方式是什么 我有一个黑盒子。我给它一个支持的类型,它返回一个基于该类型的随机值 对于我支持的类型,我有一个enum,定义如下: public enum Types { INTEGER, DOUBLE, BIGINTEGER, BIGDECIMAL, STRING, BOOLEAN, CHAR } 我认为最简单的方法是创建一个静态函数,它返回一个基于类型的对象 public static Object get

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

我有一个黑盒子。我给它一个
支持的类型
,它返回一个基于该类型的随机值

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

public enum Types 
{
    INTEGER,
    DOUBLE,
    BIGINTEGER,
    BIGDECIMAL,
    STRING,
    BOOLEAN,
    CHAR
}
我认为最简单的方法是创建一个静态函数,它返回一个基于
类型的对象

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();
    }
}
问题是,每次我想要基于此方法检索随机值时,都必须进行额外的强制转换

我已经研究了设计模式
抽象工厂
工厂
,我无法确定实现这两种模式是否有优势。或者,如果有一种不同的设计模式似乎更合适

假设定义了我所有的
random
方法

以下是客户机的一个示例:

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

public class MyIntClass extends MyClass<Integer>
{
    public MyIntClass()
    {
        t = getRandomValue(Types.Integer);
    }
}
公共抽象类MyClass
{
保护T;
}
公共类MyIntClass扩展了MyClass
{
公共MyIntClass()
{
t=getRandomValue(Types.Integer);
}
}

像这样的东西怎么样:

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

您可能需要做一些递归工作,以允许
super
方面允许
int
Integer
使用同一供应商。

只是想知道,您将如何使用生成的结果?@lazyberezovsky在客户端的一个示例中添加了如果Java提供了重载机制以便您可以直接调用供应商,映射的意义是什么:
MyType var=overloadedFunction()
?@Val请注意,我传递的是
而不是OP的
类型
枚举
public <T> T getRandom(Class<? super T> type){
   return (T) myMap.get(Type).get();
}