类实例化任意类的对象。使用什么模式?

时间:2015-10-12 06:57:58

标签: java

我是Java新手,我希望Java专家不要仅仅因为对他们来说看起来相当原始而不能对我的问题进行投票。所以,这是我想在半伪代码中实现的:

class Big {

    ? magic_field;

    ? magic_method (int _idx){            
         if (_idx == 1){
             magic_field = new Object_1();
         }
         else if (_idx == 2){
             magic_field = new Object_2();
         }
         ...
         else if (_idx == N){
             magic_field = new Object_N();
         }
         return magic_field;
    }   
}

我已经尝试过问这个问题,但是在现实世界的背景下,真实的领域和程序,但没有得到我的问题的答案。实际上所有的答案都重用了泛型的概念,并从

开始
class Big <T extends Something>

但是我要强调它数千次 - Object_1Object_2,...,Object_N可能是完全不同的类彼此无关 - 它们不是某些父类的子类,它们不是彼此的子类。它们完全不同,实际上是彼此的黑盒子。因此,T extends Something的概念不起作用,因为没有任何内容可以扩展。虽然,我提供了一个半伪示例,但在答案中我希望看到一个真正的类 - 为简单起见,我们将它推广到两个任意类。谢谢!

2 个答案:

答案 0 :(得分:1)

如果类型之间没有关系,那么Magic field simple应该是Object(一切都是Object!)

这样的事情:

class Big {

    private Object magic_field;

    public Object magic_method (int _idx){            
         if (_idx == 1){
             magic_field = new Object_1();
         }
         else if (_idx == 2){
             magic_field = new Object_2();
         }
         ...
         else if (_idx == N){
             magic_field = new Object_N();
         }
         return magic_field;
    }   
}

class Object_1 {
//...
}

class Object_2 {
//...
}

class Object_N {
//...
}

答案 1 :(得分:1)

Java是一种强大的静态类型编程语言。你要问的是,如果你不想使用泛型,首先在java上下文中并不是很自然。也许您可以将它移植到Ruby,Racket,Python等动态类型语言中,或者您可以扩展Java语言的类型系统。

所以你可以像Johan Graham建议的那样写它。

Object magicField;
magicField = new ClassA();
magicField = new ClassB();

然后,您还应该将您的出价类型存储到magicField变量中,因为您需要反射来从中提取数据。