2017-12-03 165 views
1

我目前工作的一個大項目,其中包括三種不同類型的CRUD的。我的ICrud接口包含<t>,以便在我實現它時放入所需的數據類型。接口衝突的java

我的問題是,當我在第三類中實現它,我願的方法(readAll)使用其他數據類型比4種的其他方法(CRUD)之一。這有可能以任何方式?

現在我有readAll方法返回匹配的數據類型,但返回null因爲它沒有被使用,而是創建了另一個方法readall2(),它返回正確的數據類型,但不是我的接口的一部分。

的ICrud接口:

public interface ICrud<T> { 

List<T> readAll(); 

List<T> read(int cvr); 

void create(T t); 

void delete(int cvr); 

void update(T t, int id); 
} 

我如何實現它:

@Service 
public class AdminRepository implements Ilogin<Admin>, ICrud<Driver>, 
IAdmin<Company> 

我希望如何使用ReadAll:

public List<Company> readAll() 

(不是司機,但司機對所有在接口的其它方法)

我想補充;起初,我有iAdmin中的readAll,因爲它需要公司,但是我在6個其他類中實現了ICrud的readall方法。

感謝您的任何幫助。 :)

+1

請提供您的接口定義的樣本,以更好地闡明你的描述。 –

+0

事實上,如果沒有具體的例子,問題是什麼是非常不清楚的。 –

回答

1

你有一個設計問題,我建議你在下面的鏈接瞭解SOLID原則:

https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design

在正確的設計,你不應該在所有實現一個接口,如果你不實現它的一個方法(readAll你的情況)。這意味着你正在混淆關注點,並且你的界面必須分成更小的界面。也許將readall分解成單獨的界面將解決您的問題。例如,而不是ICrud,單獨爲寫操作創建一個接口,另一個用於讀操作,另一個用於readAll。

有許多辦法來解決你的問題保持了接口ICrud的是,如使用對象爲retrun類型,泛型或動態或。但是從根本上解決你的問題就是遵循上面提到的一個好設計。

+0

是的,這是有道理的,我們仍然在學習設計模式,這聽起來像是一個好主意。說我想跳過偷工減料,它會在我實現類是可能的,簡單的說ICrud 然後在方法進一步下降指定? – ITGuru

+1

不,我在回答時沒有看到您添加的代碼,但我的建議仍然適用。您對泛型的使用比使用對象更好。但我的建議是將readAll分離到另一個接口,如IReadAll 這樣你可以有兩個接口IWriteCruds 和IReadAll ,當你實現那些你可以替代IWriteCruds 和IReadAll 。 – RaniDevpr

+0

這是一個好點,我會這樣做。在未來,這將導致如此多的界面,你如何跟蹤它們?在文件夾中排序它們? – ITGuru