访问Eclipse项目共享的类中的包私有字段

时间:2012-09-22 01:42:01

标签: java eclipse shared-libraries access-modifiers package-private

我有一个模型类(MVC pattern),我正在两个Eclipse项目中使用它。

一个项目,我们称之为Producer,是从流中捕获数据并将其存储到数据库中。有问题的模型类,比如ObjectModel,用于在序列化和存储到数据库之前反序列化流以进行操作。

另一个项目,我们称之为Consumer,正在拉入存储在数据库中的数据并在屏幕上显示它。它使用相同的模型类对存储的数据进行反序列化,以便在可视化应用程序中使用。

我计划将ObjectModel放入Eclipse项目中,以便在ProducerConsumer项目中共享其来源。但是,每个应用程序都具有当前位于同一个程序包中的类,这些类利用了package-private访问修饰符来获取和设置ObjectModel中的字段。

有什么方法可以在多个Eclipse项目之间共享源代码并仍然使用共享源维护包私有访问?

更新:我无法在Eclipse项目中共享代码,这就是为什么我不会在发布之前尝试这样做。最后让这部分工作,然后把它写成另一个答案here

2 个答案:

答案 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可以位于不同的源文件夹或项目中。