尝试添加(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 操作。
知道哪里出了问题吗?
提前致谢!对不起,如果我的英语不好。
问题是你自己创建了Arraylist
class(全名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
方法,默认实现会抛出该异常。
解决方案:
- 完成您的
agenda.Arraylist
class. 的实施
- 不要实施您自己的
Arraylist
。请改用标准 java.util.ArrayList
。 (除非你有充分的理由,否则你不应该实现你自己的标准 classes 版本。)
更新
(我没有注意到 ArrayList
与 Arraylist
的细微差别。我的视力不如以前了。抱歉。我已经更新了以上...)
你的堆栈跟踪是这样说的:
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
.
注:
- 这不是
java.util.ArrayList
。
Arraylist
的大写...不同。
- 查看您的代码,我可以看到:
- 您正在使用
Arraylist
class,并且
- 您正在调用其
size()
方法。
即使您导入真正的 ArrayList
class,也没有什么区别。您没有使用它是因为您使用了错误的简单名称。
我们无法确定您是如何到达当前状态的,但是堆栈跟踪不会说谎,您的源代码也不会。
(如果我猜的话,可能是在某个时候你使用了 IDE 的 "suggest a correction" 功能来修复未定义的符号编译错误为您拼写错误的 Arraylist
标识符。但是您选择了错误的更正...并且您的 IDE 有助于生成 Arraylist
class 的骨架实现而不是拼写更正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 操作。
知道哪里出了问题吗?
提前致谢!对不起,如果我的英语不好。
问题是你自己创建了Arraylist
class(全名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
方法,默认实现会抛出该异常。
解决方案:
- 完成您的
agenda.Arraylist
class. 的实施
- 不要实施您自己的
Arraylist
。请改用标准java.util.ArrayList
。 (除非你有充分的理由,否则你不应该实现你自己的标准 classes 版本。)
更新
(我没有注意到 ArrayList
与 Arraylist
的细微差别。我的视力不如以前了。抱歉。我已经更新了以上...)
你的堆栈跟踪是这样说的:
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
.
注:
- 这不是
java.util.ArrayList
。 Arraylist
的大写...不同。- 查看您的代码,我可以看到:
- 您正在使用
Arraylist
class,并且 - 您正在调用其
size()
方法。
- 您正在使用
即使您导入真正的 ArrayList
class,也没有什么区别。您没有使用它是因为您使用了错误的简单名称。
我们无法确定您是如何到达当前状态的,但是堆栈跟踪不会说谎,您的源代码也不会。
(如果我猜的话,可能是在某个时候你使用了 IDE 的 "suggest a correction" 功能来修复未定义的符号编译错误为您拼写错误的 Arraylist
标识符。但是您选择了错误的更正...并且您的 IDE 有助于生成 Arraylist
class 的骨架实现而不是拼写更正ArrayList
的名称并添加必要的导入。但这只是一个猜测...)