为什么下面的代码不起作用?
import java.util.Comparator;
public class TestInner {
public static void main(String[] args) {
Comparator<String> comp = new Comparator<String>(){
private String sample = null;
@Override
public int compare(String arg0, String arg1) {
// TODO Auto-generated method stub
return arg0.compareTo(arg1);
}
public void setText(String t1){
sample = t1;
}
};
// compiler error - Method is undefined for the type Comparator<String>
comp.setText("xyz");
}
}
我在示例代码中使用了comparator。同样的情况也发生在任何对象的比较器上。
我正在创建一个实现了comparator接口的内部类,为什么它现在允许我在这里添加新方法?
4条答案
按热度按时间oxcyiej71#
不允许这样做的原因是因为你有
Comparator
在你的左手边=
和一个Comparator
没有一个setText
方法。要解决此问题,必须使用setText
方法并使用左侧的命名类。例如,此代码将编译:请注意,此代码仍将无法编译,因为您没有
MyComparator
在左侧:yduiuuwa2#
因为comparator没有声明settext()方法,而您正试图使用comparator引用变量调用该方法。
mznpcxlj3#
创建内部类时,它没有可以直接使用的类型。
您正在将内部类指定给类型为的变量
Comparator
因此,当引用该变量时,只能访问由类型定义的方法Comparator
.如果您想在外部使用其他方法,您应该创建一个单独的类
implements Comparator
.tcomlyy64#
这个
Comparator
接口没有setText()
方法。您已将变量的类型声明为Comparator
,而不是某些customer类,因此只能调用属于Comparator