gpt4 book ai didi

java - 如何处理模块化应用程序中的通用类/接口(interface)?

转载 作者:搜寻专家 更新时间:2023-11-01 03:03:43 25 4
gpt4 key购买 nike

我是 Java 的新手,我正在编写这样的模块化应用程序:

*************          *******         ***********
* * * * * Data *
* Front-end * -------- * API * ------- * Handler *
* * * * * *
************* ******* ***********

本质上,我希望能够定义一个包含 N 个类的 API,然后让“数据处理程序”模块处理将对象存储在某个地方(例如数据库),而前端不需要知道任何事情这是如何实现的。

那么,假设我在我的 API 中定义了两个类:Contract 和 Company。我希望前端能够执行以下操作:

myContract = new Contract();
myCompany = new Company();
myContract.setCompany(myCompany);
myContract.save();
myCompany.save();

这样,将来我可以更改存储数据的方式(数据处理程序模块),而无需更改前端的任何代码。

为此,我在 API 模块中为 Contract 和 Company 编写了两个接口(interface)。然后,在数据处理程序模块中,我编写了实现两个接口(interface)的类:DbContract 和 DbCompany。

现在,我遇到了问题,因为我在 Contract 接口(interface)中将 getter/setter 方法定义为:

public interface Contract {
public Company getCompany();
public void setCompany(Company company);
}

并在 DbContract 中将它们实现为:

public class DbContract implements Contract {
private DbCompany company;

@Override
public Company getCompany() {
return this.company;
}

@Override
public void setCompany(Company company) {
this.company = company;
}
}

但是,我到处都遇到类类型不匹配错误...我完全错过了重点吗?我应该怎么做?

预先感谢您的帮助。

最佳答案

改变

    private DbCompany company;

    private Company company;

每样东西都应该是甜的。

否则,您将需要前端了解您正在处理的公司类型并通用化。这还没有被编译但是是这样的:

public interface Contract<T extends Company>{
public T getCompany();
public void setCompany(T company);
}

public class DbContract implements Contract<DbCompany> {
private DbCompany company;

@Override
public DbCompany getCompany() {
return this.company;
}

@Override
public void setCompany(DbCompany company) {
this.company = company;
}
}

关于java - 如何处理模块化应用程序中的通用类/接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com