2017-12-03 206 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