用于存储不同类对象的类?

时间:2013-10-25 07:55:58

标签: java collections

我应该使用哪个类来制作不同类型的集合?我在使用不同类的对象的ArrayList或LinkedList时遇到错误。

import java.util.*;
class A extends Object {
    private String name;
    A(String n) {   name = n;}
    public String toString() {  return name;}
}
class B extends Object {
    private String name;
    B(String n) {name = n;}
    public String toString() { return name;}
}

class c {
    public static void main(String args[]) {
        ArrayList ml= new ArrayList();
        ml.add(new A("1"));
        ml.add(new A("2"));

        Iterator itr = ml.iterator();
        B b = new B("1001");
        ml.add(b);

        while(itr.hasNext()) {
            Object element = itr.next();
            System.out.println(element + "\n");
        }
        System.out.println();
    }
}

3 个答案:

答案 0 :(得分:1)

通常你会定义一个Interface,其中包含这些特定对象共享的所有方法。然后,您将定义一个列表,该列表包含实现该特定接口的成员。

我的建议是假设同一个集合中的项目有一些共同的行为。

List<MyInterface> list = new ArrayList<MyInterface>();
...

另一种方法是根本不定义任何类型:

List list = new ArrayList();
...

这两种方法的区别在于,对于第一种方法,您确切地知道您拥有什么以及可以使用什么。不需要进行转换/检查,并且可以在编译时捕获某些错误。但是,第一种方法需要在设计阶段进行更多思考。

后者更像是一个捕获所有场景,但是它需要您进行检查和其他机制以确定您正在使用的对象类型。

答案 1 :(得分:0)

post trow异常中的代码: java.util.ConcurrentModificationException

此异常的原因 - 获取迭代器后更改列表。 你应该在获得迭代器之前更改列表。

请查看文章http://www.javacodegeeks.com/2011/05/avoid-concurrentmodificationexception.html

答案 2 :(得分:0)

如果你有不同的对象,首先要定义他们共享的任何相似之处。现在创建一个超类或对象类扩展或实现的接口。然后定义高级接口或超类的List。在运行时中,如果您知道的话,使用特定对象将列表中的对象强制转换。否则将对象类型与您正在考虑的所有对象类型匹配。

另一种方法可以是一个List of Object类。在运行时转换为适当的对象,或者就像先前将检索到的对象与不同对象类型的集合匹配一样。

上述程序应易于编码。

相关问题