首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用字符串访问实例中的java类成员

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

Stack Overflow用户
提问于 2019-07-23 01:49:49
回答 2查看 107关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
复制
public class MyData {
    public String name = "";
    public String nameonly = "";
    public int id = 0;
    public double earn = 0;
    public double paid = 0;
    ....

    public MyData(String name, String nameonly, int id) {
        this.name = name;
        this.nameonly = nameonly;
        this.id = id;
    }
}

然后我有一个包含这个类的数组的类,用于特定类型的人,名为AllMyData

代码语言:javascript
代码运行次数:0
运行
复制
public class AllMyData {
    public ArrayList<MyData> cli = new ArrayList<>();
    public ArrayList<MyData> sub = new ArrayList<>();
    public ArrayList<MyData> emp = new ArrayList<>();
    public ArrayList<MyData> exp = new ArrayList<>();
    public ArrayList<MyData> oex = new ArrayList<>();
    public ArrayList<MyData> bin = new ArrayList<>();
    public ArrayList<MyData> ven = new ArrayList<>();
    ....
}

在main类中,我需要向特定的数组添加新项(如果id不存在),其中我有一个代表AllMyData数组的字符串

代码语言:javascript
代码运行次数:0
运行
复制
public AllMyData elems = new AllMyData();

public void initArray(int id, String name, String tip) {
    //this is an example just for "cli" element and "cli" is in String tip
    if (!checkForId(elems.cli, id)) {
        MyData element = new MyData(name, name, id);
        elems.cli.add(element);
    }
}

private boolean checkForId(ArrayList<MyData> a, int id) {
    for (MyData e : a) {
        if (e.id == id) return true;
    }
    return false;
}

然后我只需要一个电话,例如:

代码语言:javascript
代码运行次数:0
运行
复制
initArray(5, "Test", "emp");

并希望避免使用switch语句,并为每个类型重复编写代码。在此调用中,"emp“将是元素elems.emp

有没有一种方法可以用字符串名称而不是创建switch语句来访问elems成员?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-23 02:04:43

改为在AllMyData中创建列表映射。

代码语言:javascript
代码运行次数:0
运行
复制
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        AllMyData data = new AllMyData();
        data.add("foo", new MyData("Hello World", "", 1));
        data.add("cli", Arrays.asList(new MyData("BASH", "", 2), new MyData("SHELL", "", 3)));
        System.out.println(data);
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
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=[]}]
代码语言:javascript
代码运行次数:0
运行
复制
import java.util.*;

public class AllMyData {
    private Map<String, List<MyData>> map;

    public AllMyData() {
        map = new HashMap<String, List<MyData>>();

        map.put("cli", new ArrayList<>());
        map.put("sub", new ArrayList<>());
        map.put("emp", new ArrayList<>());
        map.put("exp", new ArrayList<>());
        map.put("oex", new ArrayList<>());
        map.put("bin", new ArrayList<>());
        map.put("ven", new ArrayList<>());
    }

    public void add(String key, List<MyData> data) {
        List<MyData> list = get(key);
        if (list == null) {
            map.put(key, data);
        } else {
            list.addAll(data);
            map.put(key, list);
        }
    }

    public void add(String key, MyData data) {
        List<MyData> list = get(key);
        if (list == null) {
            list = new ArrayList<>();
        }
        list.add(data);
        map.put(key, list);
    }

    public List<MyData> get(String key) {
        return map.get(key);
    }

    @Override
    public String toString() {
        return String.format("AllMyData [map=%s]", map);
    }
}
代码语言:javascript
代码运行次数:0
运行
复制
public class MyData {
    public String name = "";
    public String nameonly = "";
    public int id = 0;
    public double earn = 0;
    public double paid = 0;

    public MyData(String name, String nameonly, int id) {
        this.name = name;
        this.nameonly = nameonly;
        this.id = id;
    }

    @Override
    public String toString() {
        return String.format("MyData [name=%s, nameonly=%s, id=%s, earn=%s, paid=%s]", name, nameonly, id, earn, paid);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2019-07-23 02:04:50

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

它看起来像这样:

代码语言:javascript
代码运行次数:0
运行
复制
`Map> allMyData = new HashMap<>();`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57151299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档