在单个for循环中创建不同类的新对象

时间:2016-11-13 02:11:45

标签: java instantiation

我对编程有点新意,我被困住了。假设我在一个项目中有五个不同的类:foo1,foo2,foo3,foo4和foo5,它们都有不同但类似的东西。现在说我需要创建每个对象的新对象,如下所示:     foo1 bar1 = new foo1();     foo2 bar2 = new foo2();     foo3 bar3 = new foo3(); 等等。 当然可行,但我真的想找到一种方法来节省大量的空间,如果我可以在一个for循环中实例化我需要的所有对象,或者至少把我想要创建的所有对象放在一个单个数组可以解决。如果它是完全相同的类,我可以使它工作,但如果它不同,我可以。它甚至可能吗?

3 个答案:

答案 0 :(得分:0)

尝试阅读一些可以在Java中使用的多态性。 Interfaces和Abstract类如何工作。 Java和其他内容中的extendsimplements关键字是什么......

我发现这些教程看起来不错:

TutorialsPoint polymorphism

Oracle polymorphism

答案 1 :(得分: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);
    }
}

但由于所有对象都是异构的,因此数组必须是Object[]

类型

答案 2 :(得分: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();
    //...
}