1

次のコードが機能しないのはなぜですか?

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 でも同じことが起こっています。

Comparator インターフェイスを実装した内部クラスを作成していますが、ここに新しいメソッドを追加できるようになったのはなぜですか?

4

4 に答える 4

4

これが許可されない理由はComparator、左側に=aがあり、 a にはメソッド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;
        }

    }


}
于 2013-06-06T04:56:30.657 に答える
0

インターフェイスにはメソッドComparatorがありませんsetText()。変数の型をComparator一部の顧客クラスではなく として宣言したため、呼び出すことができる唯一のメソッドはに属するものですComparator

于 2013-06-06T05:04:56.440 に答える
0

Comparator は setText() メソッドを宣言しておらず、Comparator 参照変数を使用してメソッドを呼び出そうとしているためです。

于 2013-06-06T05:18:50.130 に答える
0

内部クラスを作成するとき、直接使用できるタイプはありません。

内部クラスをタイプの変数に割り当てているComparatorため、その変数を参照すると、タイプによって定義されたメソッドにのみアクセスできますComparator

他のメソッドを外部で使用したい場合は、別のクラスを作成する必要がありますimplements Comparator

于 2013-06-06T04:58:44.883 に答える