我有一个模型类(MVC pattern),我正在两个Eclipse项目中使用它。
一个项目,我们称之为Producer
,是从流中捕获数据并将其存储到数据库中。有问题的模型类,比如ObjectModel
,用于在序列化和存储到数据库之前反序列化流以进行操作。
另一个项目,我们称之为Consumer
,正在拉入存储在数据库中的数据并在屏幕上显示它。它使用相同的模型类对存储的数据进行反序列化,以便在可视化应用程序中使用。
我计划将ObjectModel
放入Eclipse项目中,以便在Producer
和Consumer
项目中共享其来源。但是,每个应用程序都具有当前位于同一个程序包中的类,这些类利用了package-private访问修饰符来获取和设置ObjectModel
中的字段。
有什么方法可以在多个Eclipse项目之间共享源代码并仍然使用共享源维护包私有访问?
更新:我无法在Eclipse项目中共享代码,这就是为什么我不会在发布之前尝试这样做。最后让这部分工作,然后把它写成另一个答案here。
答案 0 :(得分:1)
只要Producer和Consumer项目中的类与ObjectModel在同一个包中声明,它就应该可以正常工作。
但是,您可能需要重新考虑您的设计,并在ObjectModel中提供公共访问器方法(getter和setter)。
答案 1 :(得分:1)
请看@GreyBeardedGeek上面的回答:
只要Producer和Consumer项目中的类与ObjectModel在同一个包中声明,它就应该可以正常工作。
您正在寻找Java中的C ++朋友。一般来说,可以是错误设计的症状。如果您的设计没问题,那么使用“package-private access”是实现朋友的Java标准方式。如果你的课程在不同的项目中,它将在技术上有效......如果你认为你的设计没问题,也许你想考虑使用* Heper课程。例如:
public class SomeClass {
void foo(){...
}
}
public class SomeClassHelper {
private SomeClass someClass;
public SomeClassHelper(SomeClass someClass){
//you can do it better this with some DI Framework,
//for illustration purpose
this.someClass=someClass;
}
public SomeClassHelper(){
//for illustration purpose only
this.someClass=new SomeClass();
}
**public** void foo(){
//this is punch line
someClass.foo();
}
}
您应该将SomeClassHelper放在与SomeClass相同的包中,但SomeClassHelper可以位于不同的源文件夹或项目中。