我有一种情况,我有一个具有某种职业的用户,所以我有这样的东西:
public abstract class Job
{
private static String name;
public static String getJobName() { return name; }
}
和
public class Baker extends Job
{
// I realize this is probably wrong, but not the main point
Baker() { name = "Baker"; }
}
然后我想将用户->职业存储在像这样的 map 中
Map<User, Class<? extends Job>> uJobs = HashMap<User, Class<? extends Job>>();
uJobs.put(user, Baker.class); // This seems to work
String jobName = uJobs.get(user).getJobName(); // This not so much, and the IDE (eclipse) just somes 'class' specific stuff, not Job specific stuff.
如有任何建议,我们将不胜感激。这里的核心目标是将 1 个对象映射到一个类,我可以从中调用静态方法,而不需要每个对象都有一个实例。
最佳答案
不要将类对象放入 HashMap 中,只需放入类的实例即可。
Map<User,Job> uJobs=new HashMap<User, Job>();
uJobs.put(user, new Baker());
String jobname=uJobs.get(user).getJobName();
更好的是,您可能不需要在每次添加用户时创建 Baker 的新实例。制作静态或单例。
class Baker extends Job
{
public static Job instance=new Baker();
public String getJobName()
{
return "Baker";
}
}
...
uJobs.put(user, Baker.instance);
如果区分作业的唯一因素是数据,则不需要子类化。你也可以说
class Job
{
public static Job BAKER=new Job("baker", 7);
public static Job BUTCHER=new Job("butcher", 12);
public static Job CANDLESTICK_MAKER=new Job("candlestick maker", 27);
private String name;
private int whateverCode;
pubilc Job(String name, int whateverCode)
{
this.name=name;
this.whateverCode=whateverCode;
}
public String getJobName()
{
return name;
}
public int getWhateverCode()
{
return whateverCode;
}
}
...
uJob.put(user, Job.BAKER);
关于java - 在 Java 中将静态类指针存储在映射中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783350/