如何使用字符串访问实例中的java类成员

如何使用字符串访问实例中的java类成员,java,class,arraylist,class-members,Java,Class,Arraylist,Class Members,我有一个包含一些数据的小班,叫做MyData: 公共类MyData{ 公共字符串名称=”; 公共字符串nameonly=“”; 公共int id=0; 公共双收入=0; 公共双付=0; .... 公共MyData(字符串名称、仅字符串名称、int-id){ this.name=名称; this.nameonly=nameonly; this.id=id; } } 然后我有一个类,该类的数组用于特定类型的人,称为AllMyData: 公共类AllMyData{ public ArrayList

我有一个包含一些数据的小班,叫做
MyData

公共类MyData{
公共字符串名称=”;
公共字符串nameonly=“”;
公共int id=0;
公共双收入=0;
公共双付=0;
....
公共MyData(字符串名称、仅字符串名称、int-id){
this.name=名称;
this.nameonly=nameonly;
this.id=id;
}
}
然后我有一个类,该类的数组用于特定类型的人,称为
AllMyData

公共类AllMyData{
public ArrayList cli=new ArrayList();
public ArrayList sub=新的ArrayList();
public ArrayList emp=new ArrayList();
public ArrayList exp=new ArrayList();
public ArrayList oex=new ArrayList();
public ArrayList bin=new ArrayList();
public ArrayList ven=新的ArrayList();
....
}
在main类中,我需要将新项添加到特定数组(如果
id
不存在),其中我有一个代表
AllMyData
数组的字符串

public AllMyData elems=new AllMyData();
公共void initArray(int-id、字符串名称、字符串提示){
//这只是“cli”元素的一个示例,“cli”在字符串提示中
如果(!checkForId(elems.cli,id)){
MyData元素=新的MyData(名称、名称、id);
元素cli.add(元素);
}
}
私有布尔校验码(ArrayList a,int-id){
对于(MyData e:a){
if(e.id==id)返回true;
}
返回false;
}
然后我只需要一个电话,例如:

initArray(5,“测试”、“emp”);
并且希望避免switch语句,并为每种类型重复代码。在这个调用中,“emp”将是element
elems.emp


有没有办法用字符串名访问
elems
成员而不是创建switch语句?

AllMyData
中创建列表映射

导入java.util.array;
公共班机{
公共静态void main(字符串[]args){
AllMyData=新建AllMyData();
添加(“foo”,newmydata(“helloworld”,“1”);
data.add(“cli”,Arrays.asList(newmydata(“BASH”,2),newmydata(“SHELL”,3));
系统输出打印项次(数据);
}
}
import java.util.*;
公共类AllMyData{
私人地图;
公共AllMyData(){
map=新的HashMap();
put(“cli”,新的ArrayList());
put(“sub”,新的ArrayList());
put(“emp”,新的ArrayList());
put(“exp”,newarraylist());
map.put(“oex”,新的ArrayList());
put(“bin”,新的ArrayList());
map.put(“ven”,新的ArrayList());
}
公共无效添加(字符串键、列表数据){
列表=获取(键);
if(list==null){
地图。放置(键、数据);
}否则{
list.addAll(数据);
地图。放置(键、列表);
}
}
公共void添加(字符串键,MyData){
列表=获取(键);
if(list==null){
列表=新的ArrayList();
}
列表。添加(数据);
地图。放置(键、列表);
}
公共列表获取(字符串键){
返回map.get(key);
}
@凌驾
公共字符串toString(){
返回String.format(“AllMyData[map=%s]”,map);
}
}
公共类MyData{
公共字符串名称=”;
公共字符串nameonly=“”;
公共int id=0;
公共双收入=0;
公共双付=0;
公共MyData(字符串名称、仅字符串名称、int-id){
this.name=名称;
this.nameonly=nameonly;
this.id=id;
}
@凌驾
公共字符串toString(){
返回字符串.format(“MyData[name=%s,nameonly=%s,id=%s,earn=%s,paid=%s]”,name,nameonly,id,earn,paid);
}
}

考虑使用从字符串到ArrayList的映射

它看起来是这样的:


Map>allMyData=newhashmap();

这听起来像是XY问题。我建议您按照命名约定编写代码。就目前情况而言,当变量名以大写字母开头,类名以小写字母开头时,阅读代码是相当令人困惑的。@Gendarme我继续,并将类名大写,因为很难查看。很抱歉,Java还是新手…要解释XY问题是什么:。在本例中,您展示了一种非常奇怪的处理方式:如果您有不同类型的数据,请创建一个“主类”,对所有共享功能进行编码,并将其扩展到捕获不同数据类型的特定类,每种类型一个。然后依靠java强大的类型来调用基于类型匹配的正确方法。。。。这与我的方法完全不同。我仍然是一个Java新手,只是试图将我在AS3中已有的代码“转换”为Java代码。。。。。
AllMyData [map={cli=[MyData [name=BASH, nameonly=, id=2, earn=0.0, paid=0.0], MyData [name=SHELL, nameonly=, id=3, earn=0.0, paid=0.0]], sub=[], oex=[], bin=[], foo=[MyData [name=Hello World, nameonly=, id=1, earn=0.0, paid=0.0]], emp=[], exp=[], ven=[]}]