1 回答

TA貢獻1831條經(jīng)驗 獲得超9個贊
問題是我不喜歡在界面中不指定通用類型......
這正是你解決這個問題的方式。
當我需要從列表中獲取對象時,可以說 Integer x = (Integer)list.get(index); 這只是一個例子,實際上我使用用戶定義的對象。
泛型的全部意義在于您不需要這樣做。反而:
public interface MyInterface<T> {
List<T> query();
}
public class MyInteger implements MyInterface<Integer> {
// ...
}
// ...
MyInteger foo = new MyInteger();
// ...
List<Integer> list = foo.query();
// ...
Integer i = list.get(index);
或者使用var,因為它已經(jīng)出現(xiàn)在該語言中一段時間了:
// ...
var foo = new MyInteger();
// ...
var list = foo.query();
// ...
var i = list.get(index);
那么在這里使用接口是否有意義,或者更好地實現(xiàn)兩個具有相同方法簽名而沒有公共接口的單獨類?
那要看。如果您將有多個要實現(xiàn)的類,并且您需要以通用方式處理這些類的實例(例如,因此您用而不是類來MyInterface<Integer>引用它們)和/或如果代表整體結(jié)構(gòu)的某些基本方面,那么使用接口可能是有意義的。如果不這樣做,如果只是要擁有兩個帶有方法的不同類,則可能不會。這取決于整體設(shè)計和(有點)風格。MyInterface<Integer>MyInterfaceList<something> query
添加回答
舉報