У меня проблема с симуляцией интерфейсов publi c в java 8. У меня есть этот интерфейс с этими методами прямо сейчас:
public interface A<T> {
void method1(T t) throws someException;
void method2(T t) throws someException;
default method3() {
return Collections.emptyMap();
}
}
Интерфейс A реализован классом B
, который является абстрактным классом:
public abstract class B<T> implements A<T> {
@Override
public void method1(T type) throws someException {
// (.... some code snipets ....)
}
}
method1
содержит все логи c и должен быть тем, который разработчик может видеть / использовать.
Теперь Ниже представлено конкретное представление класса B
:
public final class ConcreteB extends B<someObject> {
private static ConcreteB concreteBInstance = null;
private ConcreteB() {
}
public static ConcreteB getInstance() {
if (concreteBInstance == null) {
concreteBInstance = new ConcreteB();
}
return concreteBInstance;
}
@Override
public void method2(someObject someObject) throws someException {
// (... code ...)
}
}
Итак, подведем итог: конкретная реализация B реализует method2
(и method3, если пользователь хочет). Класс B реализует method1
, который содержит все логи c.
Моя проблема здесь в том, что когда я выполняю ConcreteB.getInstance()
, методы, доступные разработчику для использования, это method1
, method2
и method3
, и я хочу сделать только метод1 видимым для разработчика. Но поскольку java 8 не позволяет мне создавать закрытые методы для интерфейсов, я не знаю, как это сделать.
Есть ли какие-либо советы, как решить эту проблему?
Спасибо !