我对编程有点陌生,我被卡住了。假设我在一个项目中有五个不同的类:foo1、foo2、foo3、foo4和foo5,它们都做不同但相似的事情。现在假设我需要为每个对象创建一个新对象,比如:foo1 bar1=new foo1();foo2 bar2=新的foo2();foo3 bar3=新的foo3();等等当然这是可行的,但如果我能在一个for循环中实例化我需要的所有对象,或者至少把我想要创建的所有对象放在一个数组中进行处理,我真的想找到一种节省大量空间的方法。如果是同一个班级,我可以让它工作,但如果是不同的班级,就不行。有可能吗?
听起来工厂方法模式就是你想要的。
您试图以多态方式处理的任务与通常的有点不同,因为实例化通常需要您知道要创建的对象的具体类型。工厂会允许你这样做。
首先,您需要确保要实例化的类型来自同一个接口:
interface Foo { }
class Foo1 implements Foo { }
class Foo2 implements Foo { }
然后可以定义工厂类型:
interface FooFactory {
Foo createFoo();
}
创建返回不同类型的Foo
的FooFactory的实现:
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();
//...
}
如果类名按顺序排列,则可以使用以下命令:
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[]
试着阅读一些关于多态性的知识,这些知识可以在Java中使用。接口和抽象类是如何工作的。什么是在Java和其他语言中扩展了
和实现了
关键字。。。
我发现这些教程看起来不错:
点多态性教程
Oracle多态性
我一直在使用JavaScript代码进行自动GUI测试。我一直在进行全面的测试,并优化了一些代码。例如,我有一个函数可以将值输入到窗口的所有字段中,该窗口大致如下所示: 最初输入函数看起来是这样的:这是相当笨拙的,占用了很多空间,不如编辑函数以接受一个将字段作为属性值的对象那样整洁。现在函数看起来像这样:其中是这样定义的: 在我进入测试一个特殊需求的部分之前,这一直工作得很好,该需求说明当您在窗口
我有一个名为Card的类,我有一个for循环: 我想做的是基于for循环创建新实例。例如,我希望名字是card1、card2、card3等等。数字来自for循环。 我试过这个,但似乎不起作用: 谁能告诉我我做错了什么吗? 谢谢 所以我正在使用气垫船充满鳗鱼的解决方案,但我还有另一个问题。 我用的是卡片列表。添加(新卡()),当我尝试使用Card(I)设置名称时,java不允许我这么做。在没有i的情
我试图研究我的数据中有零值的概率,我开发了一个代码,当一列数据为零时输出另一列数据的值,这正是我所需要的。但是,对于577BY29数据流中的每一列和其他28列都要这样做是很困难的,所以我决定创建一个for循环,在我有以下内容的地方为我这样做: 您可以看到,当输出数据帧有n=29列时,代码循环正确,但对于上面指定的条件,代码循环不正确。 请帮忙,谢谢!
问题内容: 我不确定这个问题是否与语言无关,因此我将以Java问题的身份提出。如果你有这样的循环 循环的每次迭代都在创建新的内存空间吗?如果是这样,是否要处理旧空间?如果没有,做这样的事情更有效吗 编辑:更新了代码以更好地说明问题 问题答案: 简短的答案:即使在Java中进行开发时,也不要理会这些事情,即使这些问题中的大多数都是由JVM自己处理的。 垃圾收集器将知道该怎么做,并将根据情况尝试做最好
问题内容: 在Java中,对巨大的矩阵X使用以下函数来打印其列不相同的元素: 首先,我按列(索引j)进行迭代,并按行(索引i)进行内部迭代。 对于不同的矩阵,此函数将被调用数百万次,因此应优化代码以满足性能要求。我想知道关于values数组。使用还是代替它会更快? 问题答案: 效率更高的方法是使用Set而不是列表,例如HashSet实现。contains方法将在O(1)中运行,而不是在带有列表的O
问题内容: 例如; 我正在使用此类: 如果我想创建N个点(originTwo,originThree … originN); 我可以使用像这样的for循环吗? 如果它是可能的; 我如何给他们起不同的名字? 问题答案: 您可以将它们放入数组。 他们会全部使用相同的,并在这些条件下。 如果你有数组和你可以做这样的: 如果您不喜欢数组,则可以使用列表: 您将其称为