在Java中,我可以创建一个名称由String传递的对象吗?

时间:2012-07-24 01:49:07

标签: java methods

我想做这样的事情:

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

2 个答案:

答案 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>