Доступ к закрытым полям пакета в классах, общих для всех проектов Eclipse

У меня есть класс модели ( шаблон MVC), который я использую в двух проектах Eclipse.

Один проект, давайте назовем это Producer, захватывает данные из потока и сохраняет их в базе данных. Модельный класс, о котором идет речь, скажем ObjectModel, используется для десериализации потока для манипуляций перед сериализацией и сохранением в БД.

Еще один проект, назовем его Consumer, извлекает данные, хранящиеся в базе данных, и визуализирует их на экране. Он использует тот же класс модели для десериализации хранимых данных для использования в приложении визуализации.

Я планировал поставить ObjectModel в проект Eclipse, чтобы поделиться своим источником через Producer а также Consumer проекты. Тем не менее, каждое приложение имеет классы, которые в настоящее время находятся в одном и том же пакете, которые используют модификатор доступа private-package для получения и установки полей в ObjectModel,

Есть ли способ, которым я могу поделиться источником между несколькими проектами Eclipse и по-прежнему поддерживать частный доступ к пакету с общим источником?

ОБНОВЛЕНИЕ: у меня были проблемы с распространением кода между проектами Eclipse, поэтому я не просто попробовал это перед публикацией. Наконец-то эта часть заработала, и записал ее как еще один ответ здесь.

2 ответа

Решение

Пока классы в проектах Producer и Consumer объявлены в том же пакете, что и ObjectModel, все они должны просто работать.

Однако вы можете переосмыслить свой дизайн и предоставить общедоступные методы доступа (методы получения и установки) в ObjectModel.

Посмотрите ответ @GreyBeardedGeek выше:

Пока классы в проектах Producer и Consumer объявлены в том же пакете, что и ObjectModel, все они должны просто работать.

Вы ищете друга на C++ в Java. В общем, это может быть признаком неправильного дизайна. Если ваш дизайн в порядке, то использование "частного доступа к пакету" является стандартным способом Java для реализации друзей. Технически это будет работать, если ваши классы находятся в разных проектах... Если вы считаете, что ваш дизайн в порядке, возможно, вы хотели бы рассмотреть возможность использования *Heper class. Например:

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 может находиться в другой исходной папке или проекте.

Другие вопросы по тегам