java - Java - 将类的实例创建为 String 作为类名
问题描述
假设我在下面有这个课程:
public class Player{
}
我可以像这样创建一个新实例:
Player someone = new Player();
现在我有一个 .txt 文件,每一行都是潜在的玩家:
乔治
·乔尔·
凯特
...
我可以读取这些行并将它们分配给这样的字符串:
字符串名称=“乔治”;
我怎样才能制作一个名为“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类中,我在创建实例后将这些字符串分配给它们,我可以获取和设置它们等,但这不是我想在这里操作的。我只是对您是否可以通过这种方式创建新实例感兴趣。
解决方案
您的变量名不应该与它所代表的实例有任何关系。您的编程应该足够抽象,这样如果您更改了该 txt 文件,就不必更改任何代码。
首先,您的 Player 类应该在构造函数中接受一个名称(有很多方法可以做到这一点,这只是最简单的)。
public class Player {
private String name;
public Player(String inName) {
name = inName
}
}
然后,当您创建玩家时,不要使用名称作为变量的名称。
Player player = new Player(name);
但是,您正在阅读 .txt,您可以为每一行创建一个播放器,或类似的东西。
推荐阅读
- javascript - 如何在没有 JSDoc 的情况下为给定的 .js 脚本定义和使用类型?
- javascript - 我的反应函数钩子没有在函数内返回数据状态?
- google-apps-script - Google Script:根据多个条件将行移动到不同的工作表
- react-native - 在 react-native 的屏幕之间传递数据
- c++ - 使用大括号和圆括号
- python - 如何使用 Python/selenium 循环获取鼠标悬停元素的内容?
- oracle - Oracle SQL Loader 和日期字段的问题
- sql - Big Query - 背靠背计算开始和结束日期
- javascript - 搜索 json 对象(反应)
- python - 如何避免此代码中的“列表索引超出范围”?