java - 我如何告诉程序向对象添加新字段?
问题描述
所以我正在做这个迷你项目,它基本上需要程序从文本文件中读取并将信息添加到对象中。但是,如果程序发现一个以编程方式不可用的新字段,我希望程序添加一个新字段。
public class Person{
public person(String name, int age){
this.name=name;
this.age=age;
}
}
假设这是我现在的对象,我从文本文件中输入的信息如下:Name=John Age=21 lastName=Doe。(但每个都是自己的一行)这将是我的主要内容:
public class miniProject{
ArrayList<String> fields= new ArrayList<String> ();
ArrayList<String> data= new ArrayList<String> ();
public static void main(String[] args) throws FileNOtFoundException{
Person temp;
File file = new File("personInfo.txt");
Scanner in = new Scanner(file);
while (in.hasNext()) {
String[] info=in.nextLine().split("="); //assuming ill get ["Name","John"] for the first line
fields.add(info[0]);
data.add(info[1]);
}
for (x=0;x<field.length;x++){
if (person.field[x]==null){ //im not really sure how id check for this
//make new field and add info
}else{
person.field[x]=data[x];
}
}
}
}
对不起,如果这真的很不稳定,我还没有时间开始它,所以我现在就编码了。在创建新字段时,它应该在我调用的对象类中吗?例如:
public class Person{
public person(String name, String age){
this.name=name;
this.age=age;
}
public void newField(String field, String info){
this.field=info;
}
}
然后我可以打电话吗?
解决方案
你不能同时拥有它:Java 是一种静态编译的语言。类的字段是“静态”的东西。您不能在运行时以编程方式添加新字段。您可以使用反射来动态计算存在哪些字段,并填充字段内容。这就是所有 XML/JSON 映射器为您做的事情:读取 XML/JSON 内容并将值推送到 Java 对象实例中,或者反过来:从那里获取数据,并将其转换为 XML/JSON 文件。
因此,如果您打算使用真实字段,则没有“稍后添加内容”。您必须预先设计应该存在哪些字段。因此,在最坏的情况下,您定义了所有可能的选项,并允许许多字段为空/空。这是一个坏主意,因为它使处理相应的对象非常容易出错。
或者,如果通过名称进行“动态”寻址是您最重要的要求,那么只需更改为使用一个字段,该字段恰好是一个 Map,例如:
Map<String, Object> myData = new HashMap<>();
但是,当然,这会带走使用“编译时”字段提供的所有优势。正如另一个答案所暗示的,使用此类映射的一种方法是使用标准 Java属性支持的各个方面。
推荐阅读
- python - 如何将 Python 中的二维点列表转换为数据框
- visual-studio - 新的 API 项目在 Dependencies > Analyzers 上有黄色感叹号
- c++ - 一个二维向量或数组中最多可以存储多少个元素?
- php - 如何将新字符串保存到新文件?
- android - 带有 ChildFragmentManager 的 Fragment 内部的底部 NavigationView 创建重叠视图
- r - 根据 R 中的标准消除重复值
- postgresql - Postgres 存储函数输入检查开销,解释计时结果
- mysql - 可以将所有相关列放在单个表中吗?多表的选择查询会影响性能吗?
- python - 我是一个“if/else”语句,我可以让用户输入的变量等于不同的东西吗?
- c++ - 在 C++ 中按引用调用或按值调用