-5

我应该使用哪个类来制作不同类型的集合?我在拥有不同类对象的 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();
    }
}
4

3 回答 3

1

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

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

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

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

List list = new ArrayList();
...

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

后者更像是一个包罗万象的场景,但是它需要您进行检查和其他机制来确定您正在使用什么类型的对象。

于 2013-10-25T08:02:46.763 回答
0

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

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

上面的程序应该很容易编码。

于 2013-10-25T08:12:05.773 回答
0

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

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

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

于 2013-10-25T08:02:32.250 回答