java - 在 Java 中将静态类指针存储在映射中

标签 java

我有一种情况,我有一个具有某种职业的用户,所以我有这样的东西:

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/

相关文章:

Java:为什么这段代码可以工作? For 循环、if/else 语句

java - 除了 'rawtohex' 之外,还有其他方法可以将数据插入 H2 中的 blob 列吗?

扩展或者是父类的 Java 泛型类型

java - 是否有可用于 Java、C++ 和 JS 的可下载的 eclipse 包

java - 如何转义数据中的定界符?

java - 使用 Thread 和 Thread.sleep 更改周期性运动的间隔

java - 如何在 Java 中将字符串插入二维字符串数组?

java - 无法在 eclipse 上下文菜单中找到 run 来运行我的 spring mvc 项目

java - 对顺序访问的文件使用内存映射有什么好处吗?

java - HADOOP-Jobtracker未运行