【问题标题】:Getter for an Object in a ArrayListArrayList 中对象的 Getter
【发布时间】:2013-08-18 23:51:16
【问题描述】:

我在 ArrayList 中有一个对象,我想在我的屏幕上打印该对象,但我无法使用这些 getter。我该怎么做?

public void start() {
            ArrayList rij = new ArrayList();
            rij.add(new Persoon("Foo","Bar",18));
            rij.add(new Persoon("Jane","Doe",52));
            rij.add(new Persoon("John","Doe",23));

            for(int i = 0; i < 3; i++){
                System.out.println((Persoon)rij.get(i).getNaam() + " " + rij.get(i).getVoornaam() + " " + rij.get(i).getLeeftijd());
            }
        }



    private String naam = "";
        private String voornaam = "";
        private int leeftijd = 0;

        public Persoon(String naam, String voornaam, int leeftijd){
            this.naam = naam;
            this.voornaam = voornaam;
            this.leeftijd = leeftijd;
        }

        public String getNaam(){
             return naam;
        }

        public String getVoornaam(){
            return voornaam;
        }

        public int getLeeftijd(){
            return leeftijd;
        }

【问题讨论】:

  • 为什么不为您的对象编写自己的toString 方法?
  • 将arraylist声明为List rij=new ArrayList();
  • 使用泛型,或添加括号。
  • 另外,你拼错了Person
  • @Gianni,你能确认你得到了 ClassCastException 吗?

标签: java object arraylist getter


【解决方案1】:

问题是您对Persoon 的转换被应用于rij.get(i).getNaam(),而不是rij.get(i)

你想要的是:

((Persoon)rij.get(i)).getNaam()

或者更简单地说:

for(int i = 0; i < 3; i++){
    Persoon p = rij.get(i);
    System.out.println(p.getNaam() + " " + p.getVoornaam() + " " + p.getLeeftijd());
}

括号很重要。你已经清楚地知道你在投射什么以及什么时候投射。

【讨论】:

  • 非常感谢!我是 Java 新手,所以这对我有很大帮助!
  • 但是你真正应该做的是使用泛型而不是使用原始类型ArrayList;见 JB Nizet 的回答。那么你根本不需要演员表。
【解决方案2】:

不要使用原始的 ArrayList。使用通用的:

这将确保类型安全,并允许您完全避免强制转换。

List<Persoon> personen = new ArrayList<Persoon>();
//...

for (int i = 0; i < personen.size(); i++) {
    System.out.println(personen.get(i).getNaam() + " " + personen.get(i).getVoornaam() + " " + personen.get(i).getLeeftijd());
}

使用 foreach 循环也会导致代码更安全、更易读:

List<Persoon> personen = new ArrayList<Persoon>();
//...

for (Persoon persoon : personen) {
    System.out.println(persoon.getNaam() + " " + persoon.getVoornaam() + " " + persoon.getLeeftijd());
}

【讨论】:

  • “persoon”的复数形式在荷兰语中是“personen”... ;-)
  • @Jesper:考虑到我是比利时人,在学校学习荷兰语,我觉得有义务修正我的答案 :-) 但我讨厌任何非英语语言的代码,甚至是法语(这是我的母语)
  • @Gianni:哎哟。然后你有一个不称职的老师,多年来(2004 年)没有学到任何关于 Java 的新知识。除非他们故意教你不好的做法,然后再教你好的做法,我个人也会觉得这很愚蠢。
【解决方案3】:

如果你想打印Person 对象,试试这个并在你的Person 类中覆盖toString() 方法

System.out.println((Persoon)rij.get(i));

【讨论】:

  • 他需要重写toString 方法,否则输出对他来说毫无用处。
【解决方案4】:

如果你在你的情况下存储像“人”这样的对象,我会推荐。使用“迭代器”总是更好

 ArrayList rij = new ArrayList();
        rij.add(new Persoon("Foo","Bar",18));
        rij.add(new Persoon("Jane","Doe",52));
        rij.add(new Persoon("John","Doe",23));
        Iterator item=rij.iterator();
        while (item.hasNext()){
            Persoon person=(Persoon)item.next();
            System.out.println(person.getNaam() + " " + person.getVoornaam() + " " + person.getLeeftijd());
        }

java.util.iterator;

希望它会起作用。如果不告诉我,我会转发完整的代码.. :D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 2019-07-30
    • 2011-12-28
    • 2011-06-16
    • 2018-08-07
    • 1970-01-01
    • 2020-11-12
    • 2020-10-29
    相关资源
    最近更新 更多