Java 关于匿名类的问题(确切错误是什么) publicstaticvoidmain(字符串[]args){ 列表=新的ArrayList(); 列表。添加(“机器人”); 添加(“苹果”); 列表。添加(“方框”); StrComp cmp=新StrComp(){ @凌驾 公共整数比较(字符串s1、字符串s2){ 返回s1.length()-s2.length(); } }; 集合。排序(列表,cmp); }
“StrComp cmp=new StrComp()”上有错误。我所做的只是在教科书中输入代码解释匿名类。。有什么问题吗???我假设您在教科书中遗漏了什么,java中没有类或接口名称Java 关于匿名类的问题(确切错误是什么) publicstaticvoidmain(字符串[]args){ 列表=新的ArrayList(); 列表。添加(“机器人”); 添加(“苹果”); 列表。添加(“方框”); StrComp cmp=新StrComp(){ @凌驾 公共整数比较(字符串s1、字符串s2){ 返回s1.length()-s2.length(); } }; 集合。排序(列表,cmp); },java,Java,“StrComp cmp=new StrComp()”上有错误。我所做的只是在教科书中输入代码解释匿名类。。有什么问题吗???我假设您在教科书中遗漏了什么,java中没有类或接口名称StrCmp,您也没有定义它,所以它会引发以下错误 public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Robot");
StrCmp
,您也没有定义它,所以它会引发以下错误
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Robot");
list.add("Apple");
list.add("Box");
StrComp cmp = new StrComp() {
@Override
public int compare (String s1, String s2) {
return s1.length() - s2.length();
}
};
Collections.sort(list,cmp);
}
正确的代码是为匿名类使用比较器
接口
error: cannot find symbol
StrComp cmp = new StrComp() {
^
symbol: class StrComp
比较器cmp=新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
返回s1.length()-s2.length();
}
};
顾名思义,匿名类构造创建了一个匿名类型—一个没有名称的类型。这不是一个“选择一个名字,并定义它的飞行”的情况 在代码中,您有一个类型;您使用名为
StrComp
的类型。这一结构将:
- 声明类型为
的新变量(意思是:仅限于引用StrComp
或引用StrComp的实例或StrComp的子类型)null
- 创建一个新的匿名StrComp子类型,该子类型是通过扩展StrComp并添加您编写的compare方法创建的
- 实例化此无名类型的新实例
- 将其分配给
变量cmp
Comparator
,因此:
Comparator cmp = new Comparator<String>() {
@Override
public int compare (String s1, String s2) {
return s1.length() - s2.length();
}
};
比较器cmp=新比较器(){
...
}
但请注意:这是过时的java,已经过时多年了。告诉你的老师学习一些新的java,或者买一本新书
您现在可以执行以下操作:
Comparator<String> cmp = new Comparator<String>() {
...
}
比较器cmp=(s1,s2)->s1.length()-s2.length();
您尚未发布StrCmp的定义。为了消除错误,您需要定义如下内容
Comparator<String> cmp = (s1, s2) -> s1.length() - s2.length();
使用:
标准的功能界面,使您更容易以简洁的方式进行操作
[Box, Robot, Apple]
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
列表=新的ArrayList();
列表。添加(“机器人”);
添加(“苹果”);
列表。添加(“方框”);
比较器cmp=(s1,s2)->s1.length()-s2.length();
集合。排序(列表,cmp);
系统输出打印项次(列表);
}
}
没有名为StrComp的类或接口。你指的是比较器,如果你不告诉我们错误,我们怎么知道出了什么问题?
[Box, Robot, Apple]
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Robot");
list.add("Apple");
list.add("Box");
Comparator<String> cmp = (s1, s2) -> s1.length() - s2.length();
Collections.sort(list, cmp);
System.out.println(list);
}
}