尝试添加(Arraylist)时出现 UnsupportedOperationException

UnsupportedOperationException when trying to add (Arraylist)

我在使用这个程序时遇到了一个小问题。这是一本约会簿,目的是能够添加联系人和事件。

这是我的代码的第一部分,也是我遇到问题的部分:

    String aux = " ";
    String aux2 = " ";
    long aux3 = 0;

    Arraylist <Person> cole1 = new Arraylist();

    do{
    System.out.println("Welcome");
    System.out.println("- Book");
    System.out.println("1. Add contact");
    System.out.println("2. See contacts");
    System.out.println("3. Remove contacts");

    switch(Integer.parseInt(teclado.readLine())){
        case 1:
            for(int i = 0; i<cole1.size();i++){

                System.out.println("Write the name");
                aux = teclado.readLine();
                System.out.println("Write the email");
                aux2 = teclado.readLine();
                System.out.println("Write the phone number");
                aux3 = Integer.parseInt(teclado.readLine());

                cole1.add(new Person(aux, aux2, aux3));
            }
            break;

        default:
            System.out.println("error");
            break;
    }

    }while(true);  

这是我的人 class:

public class Person {

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public float getNum() {
    return num;
}

public void setNum(long num) {
    this.num = num;
}

private String name;
private String email;
private long num;

public Persona(String n, String e, long nu){
    this.name=n;
    this.email=e;
    this.num=nu;

}


 }

这部分应该可以创建一个新的人,名字,phone和电子邮件属性。问题是当我在我的开关中按 1 以获取添加选项时,出现以下错误:

    Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
    at agenda.Arraylist.size(Arraylist.java:15)
    at agenda.AgendaTest.main(AgendaTest.java:40)
    C:\Users\melis\AppData\Local\NetBeans\Cache.2\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 2 seconds)

我不知道是逻辑问题还是语法问题。我读过其他一些有类似问题的人的问题。不同之处在于,它们显然都在使用 Arrays.asList 属性,如果我理解正确的话,Arrays.asList 不支持 add/remove 操作。

知道哪里出了问题吗?

提前致谢!对不起,如果我的英语不好。

问题是你自己创建了Arraylistclass(全名agenda.Arraylist),而你的class没有实现add手术。从堆栈跟踪中可以清楚地看出这一点。

我猜你的实现是这样的:

package agenda;
import java.util.AbstractList;

public class Arraylist<T> extends AbstractList<T> {
    ...
    // No override for `add(<T>)`, `add(int, <T>)`, etcetera.
}

如果您没有实现 add 方法,默认实现会抛出该异常。

解决方案:

  1. 完成您的 agenda.Arraylist class.
  2. 的实施
  3. 不要实施您自己的 Arraylist。请改用标准 java.util.ArrayList。 (除非你有充分的理由,否则你不应该实现你自己的标准 classes 版本。)

更新

(我没有注意到 ArrayListArraylist 的细微差别。我的视力不如以前了。抱歉。我已经更新了以上...)

你的堆栈跟踪是这样说的:

Exception in thread "main" java.lang.UnsupportedOperationException: Not supported yet.
at agenda.Arraylist.size(Arraylist.java:15)
at agenda.AgendaTest.main(AgendaTest.java:40)
C:\Users\melis\AppData\Local\NetBeans\Cache.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 2 seconds)

第二行表示异常被抛出在 class 中,其完全限定名称是 agenda.Arraylist.

注:

  1. 这不是 java.util.ArrayList
  2. Arraylist 的大写...不同。
  3. 查看您的代码,我可以看到:
    • 您正在使用 Arraylist class,并且
    • 您正在调用其 size() 方法。

即使您导入真正的 ArrayList class,也没有什么区别。您没有使用它是因为您使用了错误的简单名称。

我们无法确定您是如何到达当前状态的,但是堆栈跟踪不会说谎,您的源代码也不会。

(如果我猜的话,可能是在某个时候你使用了 IDE 的 "suggest a correction" 功能来修复未定义的符号编译错误为您拼写错误的 Arraylist 标识符。但是您选择了错误的更正...并且您的 IDE 有助于生成 Arraylist class 的骨架实现而不是拼写更正ArrayList 的名称并添加必要的导入。但这只是一个猜测...)