无法向内部类添加新方法

w8biq8rn  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(309)

为什么下面的代码不起作用?

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接口的内部类,为什么它现在允许我在这里添加新方法?

oxcyiej7

oxcyiej71#

不允许这样做的原因是因为你有 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;
        }

    }

}
yduiuuwa

yduiuuwa2#

因为comparator没有声明settext()方法,而您正试图使用comparator引用变量调用该方法。

mznpcxlj

mznpcxlj3#

创建内部类时,它没有可以直接使用的类型。
您正在将内部类指定给类型为的变量 Comparator 因此,当引用该变量时,只能访问由类型定义的方法 Comparator .
如果您想在外部使用其他方法,您应该创建一个单独的类 implements Comparator .

tcomlyy6

tcomlyy64#

这个 Comparator 接口没有 setText() 方法。您已将变量的类型声明为 Comparator ,而不是某些customer类,因此只能调用属于 Comparator

相关问题