[英]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.