有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我对编程有点陌生,我被卡住了。假设我在一个项目中有五个不同的类:foo1、foo2、foo3、foo4和foo5,它们都做不同但相似的事情。现在假设我需要为每个对象创建一个新对象,比如: foo1 bar1=新的foo1(); foo2 bar2=新的foo2(); foo3 bar3=新的foo3(); 等等 当然这是可行的,但如果我能在一个for循环中实例化我需要的所有对象,或者至少把我想要创建的所有对象放在一个数组中进行处理,我真的想找到一种节省大量空间的方法。如果是同一个班级,我可以让它工作,但如果是不同的班级,就不行。有可能吗


共 (3) 个答案

  1. # 1 楼答案

    听起来factory method pattern就是你要找的

    您试图以多态方式处理的任务与通常的有点不同,因为实例化通常需要您知道要创建的对象的具体类型。工厂会允许你这样做


    首先,您需要确保要实例化的类型来自同一个接口:

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

    然后可以定义工厂类型:

    interface FooFactory {
        Foo createFoo();
    }
    

    创建返回不同类型FooFooFactory实现:

    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();
        //...
    }
    
  2. # 2 楼答案

    如果类名按顺序排列,则可以使用以下命令:

    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[]类型

  3. # 3 楼答案

    试着阅读一些关于多态性的知识,这些知识可以在Java中使用。接口和抽象类是如何工作的。Java和其他语言中的extendsimplements关键字是什么

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

    TutorialsPoint polymorphism

    Oracle polymorphism