【问题标题】:Java - Creating an instance of a class as String as the class nameJava - 将类的实例创建为 String 作为类名
【发布时间】:2018-06-28 20:17:51
【问题描述】:

假设我在下面有这个课程:

    public class Player{
}

我可以像这样创建它的一个新实例:

Player someone = new Player();

现在我有一个 .txt 文件,其中每一行都可以作为潜在玩家:

乔治
乔尔
凯特
...

我可以读取这些行并将它们分配给这样的字符串:

字符串名称 = "乔治";

如何创建一个名为“george”的新播放器?例如,我想在下面创建“george”。

Player name.toClassName = new Player();

我找到的一个解决方案是:

if(name == "george"){
    Player george = new Player();
}
if(name == "joel"){
    Player joel = new Player();
}
if(name == "kate"){
    Player kate = new Player();
} ...

但是上面的这个看起来很愚蠢。 (顺便说一下,我在 Player 类中已经有一个 private name;,我在创建实例后将这些字符串分配给它们,我可以获取和设置它们等. 但这不是我想在这里操作的。我只是对你能以这种方式创建新实例感兴趣。

【问题讨论】:

  • 创建一个名为public Player(String name){this.name = name;}的构造函数然后你可以创建Player george = new Player("george");...
  • 你应该使用HashMap
  • 这样做有什么好处?你怎么能用你还不知道的名字来调用变量呢?
  • 你不想要这个。变量名称可以让您在代码中引用它。它不需要(也不应该)反映用户输入。

标签: java string class object instance


【解决方案1】:

我不喜欢像您在问题中提到的那样根据玩家名称创建变量名称的想法。如果您需要知道 Player 的名称,那么您只需访问 name 变量。但是此代码将允许您在使用构造函数创建对象时设置 Player name 字段。

 public class Player{

     Private string name;

     Player(String name)
      {
        this.name - name;
      }

}

Player player= new Player("joel");

【讨论】:

  • 谢谢,我明白你的意思了。你认为在某些情况下它仍然有用吗?就像我有一个包含 100.000 个名字的大名单。然后我可以通过使用 getPlayerName() 来找到“joel”。如果名称正确并且是“joel”,那么我的程序会对它进行一些计算。但是如果“乔尔”是这个大名单中的第 79.544 位呢?如果我知道我想用“joel”做点什么,不是更省时间更容易吗?或者这不是它的工作原理?我真的很新,现在这对我来说似乎合乎逻辑,我试图了解编码是如何工作的。谢谢
  • 变量名有助于您在编码时受益。一旦程序运行,基于人名的唯一变量名就不再帮助你了。如果您有玩家列表,则必须执行搜索和/或遍历列表才能找到您正在寻找的条目。当程序正在执行时,您永远不会将 if 语句或循环基于变量名。决定将基于变量内的值。
【解决方案2】:

您的变量名不应与它所代表的实例有任何关系。您的编程应该足够抽象,这样如果您更改了该 txt 文件,就不必更改任何代码。

首先,您的 Player 类应该在构造函数中接受一个名称(有很多方法可以做到这一点,这是最简单的)。

public class Player {
    private String name;

    public Player(String inName) {
        name = inName
    }
}

那么当你创建你的玩家时,不要使用名字作为变量的名字。

Player player = new Player(name);

无论您正在阅读 .txt,您都可以为每一行创建一个播放器,或类似的东西。

【讨论】:

  • 是的,这正是我想要做的,每一行都应该代表一个玩家。谢谢你的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2011-09-07
相关资源
最近更新 更多