我想做这样的事情:
Creator method = new Creator();
method.addSubject("example");
class Creator{
public void addSubject(String subjName) {
//here is the issue
subjName = new Subject(subjName);
}
}
class Subject {
private String name;
public Subject(String newName) {
name = newName;
}
}
所以我希望这个名为Creator的类能够创建Subjects,但是我需要它能够通过传递一个名称我想要调用这些主题的String来实现。我怎么能这样做?
编辑:为了澄清,“Creator”类有一个名为“addSubject”的方法。在程序的主要方法中,我有一个名为“方法”的Creator对象(可能应该选择一个更好的示例名称)。因此,Creator的这个对象可以创建另一个类的对象,类“Subject”,只需将方法“addSubject”传递给我想要Subject的那些对象的名称吗?
Edit2:这是我想要的伪代码:
Main method:
Initialize Creator object
Command line for program takes arguments
Pass these arguments to creator object
Creator Object:
Takes command line argument in the form of string and makes a new object of the class Subject by the name of the String
答案 0 :(得分:4)
我想你想要创建一个你想要使用该名称的类的新对象。是吗?所以,你可以这样做(Java 7)。
try {
// you need to provide the default constructor!
Object newInstance = Class.forName( "your.package.YourClassName" ).newInstance();
} catch ( ClassNotFoundException | IllegalAccessException | InstantiationException exc ) {
exc.printStackTrace();
}
如果您使用的是7之前的Java版本,则需要使用3个catch语句,一个用于ClassNotFoundException,一个用于IllegalAccessException,另一个用于InstantiationException。
编辑:我想我现在明白了。您想要创建Subject的实例,并将名称传递给该方法。您可以使用HashMap来模拟它。
类似的东西:
import java.util.*;
class Creator{
private Map<String, Subject> map = new HashMap<String, Subject>();
public void addSubject(String subjName) {
map.put( subjName, new Subject(subjName) );
}
public Subject getSubject(String subjName) {
return map.get(subjName);
}
}
class Subject {
private String name;
public Subject(String newName) {
name = newName;
}
@Override
public String toString() {
return name;
}
}
// using...
Creator method = new Creator();
method.addSubject("example");
// prints example
System.out.println( method.getSubject("example") );
// prints null, since there is not a value associeted to the "foo"
// key in the map. the map key is your "instance name".
System.out.println( method.getSubject("foo") );
答案 1 :(得分:1)
这是不起作用的一点:
subjName = new Subject(subjName);
subjName
是一个字符串,但当然new Subject()
是Subject
怎么样
Subject myNewSubject = new Subject(subjName);
当然,我想你真正想要的是将Subject
传递给某个地方(可能是Collection
?)但是你的问题没有澄清,所以我会留下它。< / p>