簡體   English   中英

無法向內部類添加新方法

[英]Not able to add new method to inner class

為什么下面這段代碼不起作用?

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 ,而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;
        }

    }


}

創建內部類時,它沒有可以直接使用的類型。

您將內部類分配給Comparator類型的變量,因此當您引用該變量時,您只能訪問Comparator類型定義的方法。

如果要在外部使用其他方法,則應創建一個implements Comparator的單獨類。

Comparator接口沒有setText()方法。 您已將變量的類型聲明為Comparator ,而不是某些客戶類,因此您可以調用的唯一方法是屬於Comparator

因為Comparator沒有聲明setText()方法,並且您嘗試使用Comparator引用變量調用該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM