【发布时间】:2009-11-04 16:15:37
【问题描述】:
如何自实例化 Java 类?我不应该使用除其类文件之外的任何文件。还假设在我初始化 NAME 变量的那一行之后,他们在编译时不知道类的名称。
例子:
public class Foo implements Bar {
public static final String NAME = "Foo";
private void instantiate() {
Bar baz = (Bar)Class.forName(NAME).newInstance();
}
//...
}
会出错,因为它需要另一个名为Bar.java 的文件。应该是:
public class Foo {
/*
Instantiate self...
*/
}
我加入了这个编程挑战网站,每个问题只允许我提交一个文件。我想为我将用于挑战的所有类创建一个模板类。所以,我的想法是我会这样做:
public class Foo {
public static final String NAME = "Foo";
public static void main (String[] args) throws IOException {
//Instantiate self and call launch(args)
Foo foo = new Foo();
foo.launch(args);
System.exit(0);
}
public void launch(String[] args) {
//...Do actual code here
}
}
我只想更改类名和 NAME 变量,而不必更改每次使用模板类时实例化类的方式。使用我目前的设置,我将不得不编辑以下行:Foo foo = new Foo();,也许还有下面的行。
您可能还想知道为什么我必须调用 launch() 而不是在 main 方法中执行所有操作。这只是我从我的 Java 讲师那里得到的东西。这也是因为我不能在main() 方法中使用非静态方法。
【问题讨论】:
-
奇数要求。你不是在找工厂模式吗?或者也许是单例模式(虽然这反过来表明设计不佳)。请详细说明您认为这是解决方案的要求,以便我们提出正确的解决方案。
-
^^ 注意:我问这个是因为“Foo foo = new Foo()”太明显了,我预计你实际上是在寻找其他东西。
标签: java class object oop instantiation