2016-11-13 199 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(); 
    //... 
}