无法向内部类添加新方法

时间:2013-06-06 04:54:49

标签: java inner-classes

为什么以下代码不起作用?

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 个答案:

答案 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引用变量调用该方法。