亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當存在不同的泛型類型時使用接口是否有意義

當存在不同的泛型類型時使用接口是否有意義

喵喵時光機 2023-10-12 20:32:39
使用接口是提供抽象的好方法,如果可能的話我通常會嘗試使用它。但這次我的情況有點不同,我不確定在這里使用是否是一個好的做法。我有兩個不同的類,需要一些具有相同簽名的查詢方法。比如說 MyString 和 MyInteger。我正在考慮用一種方法定義一個接口:public interface MyInterface{   // no type is specified for the list, because each implementation will have different type of object   List query();  }所以基本上我需要實現兩個不同的類來實現上面的接口。第一個將獲得List<String>,第二個將獲得List<Integer>查詢方法的結果。問題是我不喜歡在接口中不指定泛型類型,因為稍后我需要進行強制轉換。那么在這里使用接口是否有意義,或者更好地實現兩個具有相同方法簽名而沒有公共接口的單獨類?
查看完整描述

1 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超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,因為它已經出現在該語言中一段時間了:


// ...

var foo = new MyInteger();


// ...

var list = foo.query();


// ...

var i = list.get(index);

那么在這里使用接口是否有意義,或者更好地實現兩個具有相同方法簽名而沒有公共接口的單獨類?


那要看。如果您將有多個要實現的類,并且您需要以通用方式處理這些類的實例(例如,因此您用而不是類來MyInterface<Integer>引用它們)和/或如果代表整體結構的某些基本方面,那么使用接口可能是有意義的。如果不這樣做,如果只是要擁有兩個帶有方法的不同類,則可能不會。這取決于整體設計和(有點)風格。MyInterface<Integer>MyInterfaceList<something> query


查看完整回答
反對 回復 2023-10-12
  • 1 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號