1

我想做这样的事情:

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 的类能够创建主题,但我需要它能够通过传递一个带有我想要调用这些主题的名称的字符串来做到这一点。我怎样才能做到这一点?

编辑:为了澄清,“Creator”类有一个名为“addSubject”的方法。在程序的主要方法中,我有一个名为“方法”的 Creator 对象(可能应该选择一个更好的示例名称)。那么Creator的这个对象是否可以通过将方法“addSubject”传递给我希望Subject的那些对象具有的名称来制作另一个类“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
4

2 回答 2

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();
}

如果您使用的是Java 7 之前的版本,则需要使用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") );
于 2012-07-24T01:57:52.147 回答
1

这是不起作用的位:

subjName = new Subject(subjName);

subjName是一个字符串,但当然 anew Subject()Subject

怎么样

Subject myNewSubject = new Subject(subjName);

当然,我想您真正想要的是将其交付到Subject某个地方(Collection可能?),但是您的问题并没有澄清,所以我将其保留。

于 2012-07-24T01:54:34.643 回答