5

我有两个Eclipse项目中使用的模型类(MVC pattern)。访问跨Eclipse项目共享的类中的包 - 私有字段

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

另一个项目,我们称之为Consumer,正在提取存储在数据库中的数据并在屏幕上将其可视化。它使用相同的模型类来反序列化存储的数据以供在可视化应用程序中使用。

我计划将ObjectModel放入Eclipse项目中,以跨ProducerConsumer项目共享源代码。但是,每个应用程序都有相同的包中的类,它们利用包专用访问修饰符来获取和设置ObjectModel中的字段。

有没有什么办法可以跨多个Eclipse项目共享源代码,并仍然使用共享源代码来维护包私有访问?

UPDATE:我在跨Eclipse项目共享代码时遇到了问题,这就是为什么我在发布之前不会尝试此操作的原因。最后让这部分工作,并将其写为here

+0

你能详细说明为什么你想'仍然保持与共享源的包私有访问吗? – Vikdor

+0

'Producer'有一个类ObjectModelFactory,它创建封装来自多个不同流的数据的ObjectModel实例。 'Consumer'有一个类ObjectModelMerger,它将实时更新合并到反序列化的ObjectModel中。对于这些类中的每一个,直接访问ObjectModel字段比通过访问者更好,特别是因为除了ObjectModelFactory和ObjectModelMerger之外,程序的任何部分都不需要setter,所以我想限制访问设置'ObjectModel'字段。 – ericsoco

回答

1

只要生产者和消费者项目中的类与ObjectModel在同一个包中声明,它应该都可以正常工作。但是,您可能需要重新考虑您的设计,并在ObjectModel中提供公共访问器方法(getter和setter)。

+0

请看我上面的评论re:设计。 – ericsoco

1

看上面@GreyBeardedGeek答案:

只要在生产者和消费者项目的类在同一个包中ObjectModel声明,它应该都只是工作。

您正在寻找Java中的C++朋友。一般来说,可以是是错误设计的症状。如果你的设计没问题,那么使用“包私人访问”是实现朋友的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可以在不同的源文件夹或项目。

+0

以前没有见过朋友模式,感谢插图。似乎对揭示功能的一个子集很有帮助,但在这种情况下,我想要写入所有'ObjectModel'的字段,所以这将类似于ObjectModel中的访问器 - 比我想要的更多的代码。 – ericsoco