Я хочу использовать внешнюю библиотеку из gitHub более чистым способом
public class Sgtin { full of fields and methods including encode and decode }
в моем классе Decoder я хотел бы иметь только 2 метода из нескольких, реализованных в объекте
public class Decoder {
private static final Sgtin sgtin = new Sgtin();
public static String encode(String ean, Long serialNumber, int filterValue) {
return sgtin.encode(ean, serialNumber, filterValue);
}
public static Sgtin decode(String cpe) {
return sgtin.decode(cpe);
}
}
Я хотел бы скрыть класс Sgtin в mthod decode (в случае, если я внесу в него какие-либо изменения, мне не придется менять исходный класс), поэтому с целью сделать это я создаю другой объект (Decoder) и сопоставляю Sgtin с Это? Как лучше всего это сделать?
Спасибо, Вы правы - я сменил имя на Сгтин. Как вы думаете, оба метода могут быть статичными?
Трудно ответить, если мы не знаем, как на самом деле используется sgtin. Вы вызываете статические методы или методы экземпляра этого класса?
Что это за библиотека? Мне было бы интересно.
Sgtin - это просто общедоступный класс, который я нашел в Интернете и скопировал в свой пакет, где у меня есть класс Decoder, и попытался использовать его более изящно, скрывая «двигатель и беспорядок», включенный в класс sgtin.
Я использовал это: github.com/impinj/itemsense-hybris-datahub-java/blob/master/…
И совместить с codereview.stackexchange.com/questions/105121/…




Вы можете изменить свой класс Decoder, чтобы реализовать шаблон Singleton. Либо вам здесь не хватает кода, потому что он действительно должен вызывать NPE, поскольку sgtin не инициализирован.
Но ваш подход и так хорош.
@Anna Ты нигде не инициализировал. Сейчас это просто декларация. Вот почему я сказал, что он должен бросить npe.
@Anna Как вы сами сказали, вам нужно использовать = new Sgtin().
@Anna Да вот так
@Anna, да по-другому. вы могли бы сделать это лучше с помощью инъекции зависимостей.
Хорошо, могу ли я сказать, что это пример использования адаптера объекта шаблона? В разных источниках я заметил, что подразумеваемые методы недействительны, а класс Sgtin может быть расширен с помощью Decoder.
Object- действительно плохое название для класса, который вы хотите обернуть.