2016-11-13 195 views
1

我对编程略微陌生,而且我被卡住了。假设我在一个项目中有五个不同的类:foo1,foo2,foo3,foo4和foo5,它们都做了不同但类似的事情。现在说我需要创建每个对象的新对象,例如: foo1 bar1 = new foo1(); foo2 bar2 = new foo2(); foo3 bar3 = new foo3(); 等。 当然有效,但如果我可以在单个for循环中实例化所有我需要的对象,或者至少放置所有想要创建的对象,我真的试图找到一种节约大量空间的方法一个单独的数组来解决。如果它是全部相同的类,我可以得到它的工作,但如果它是不同的。它甚至有可能吗?在一个for循环中创建不同类的新对象

+0

你应该阅读有关*什么是多态*。 –

回答

0

如果类名是按顺序,那么你就可以使用如下:

For(int i = 0; i < 10; i++) { 
    try { 
     Class<?> cls = Class.forName("foo"+i); 
     arr[i] = cls.newInstance(); 
    } catch (ClassNotFoundException e) { 
     System.out.println("Class not found " + e); 
    } 
} 

但由于所有的对象都是异组eneous,阵列将必须是类型Object[]

0

听起来像factory method pattern是你在找什么。

您尝试多态处理的任务与平常不同,因为实例化通常要求您知道要创建的对象的具体类型。工厂将允许你这样做。


首先,你需要确保你想从同一个接口实例化派生类型:

interface Foo { } 
class Foo1 implements Foo { } 
class Foo2 implements Foo { } 

然后,您可以定义一个工厂类型:

interface FooFactory { 
    Foo createFoo(); 
} 

创建的实现FooFactory返回不同类型Foo

class Foo1Factory implements FooFactory { 
    public Foo createFoo() { 
     return new Foo1(); 
    } 
} 

class Foo2Factory implements FooFactory { 
    public Foo createFoo() { 
     return new Foo2(); 
    } 
} 

存储这些工厂的数组:

FooFactory[] factories = { 
    new Foo1Factory(), 
    new Foo2Factory() 
} 

然后通过数组循环,呼吁每个工厂createFoo()

for(FooFactory factory : factories) { 
    Foo foo = factory.createFoo(); 
    //... 
}