为什么以下代码不起作用?
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接口的内部类,为什么它现在允许我在这里添加新方法?
答案 0 :(得分:4)
不允许这样做的原因是因为Comparator
左侧有=
而Comparator
没有setText
方法。要解决此问题,您必须使用setText
方法命名一个类,并在左侧使用该命名类。例如,此代码将编译:
package com.sandbox;
import java.util.Comparator;
public class Sandbox {
public static void main(String[] args) {
MyComparator comp = new MyComparator();
// compiler error - Method is undefined for the type Comparator<String>
comp.setText("xyz");
}
private static class MyComparator implements 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;
}
}
}
请注意,此代码仍然无法编译,因为您没有将MyComparator
放在左侧:
package com.sandbox;
import java.util.Comparator;
public class Sandbox {
public static void main(String[] args) {
Comparator comp = new MyComparator();
// compiler error - Method is undefined for the type Comparator<String>
comp.setText("xyz");
}
private static class MyComparator implements 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;
}
}
}
答案 1 :(得分:0)
创建内部类时,它没有可以直接使用的类型。
您正在将内部类分配给类型为Comparator
的变量,因此当您引用该变量时,您只能访问类型Comparator
定义的方法。
如果要在外部使用其他方法,则应创建一个implements Comparator
。
答案 2 :(得分:0)
Comparator
接口没有setText()
方法。您已将变量的类型声明为Comparator
,而不是某些客户类,因此您可以调用的唯一方法是属于Comparator
答案 3 :(得分:0)
因为Comparator没有声明setText()方法,而您尝试使用Comparator引用变量调用该方法。