У меня есть интерфейс, который определяет setter/getter, используя методы по умолчанию java 8, но я получаю сообщение об ошибке при попытке подключить его весной. Я действительно хочу избежать использования абстрактного класса, и я не хочу дублировать код. Вот что я делаю:Инъекция зависимостей для java 8 методов интерфейса по умолчанию
public interface MyProcessor
{
public static final WeakHashMap<Function1D, Integer> paramMap = new WeakHashMap<>();
default void setParam(int param)
{
paramMap.put(this, param);
}
default int getParam()
{
return paramMap.get(this);
}
default double doSomthingWithParam(double x)
{
return doSomething() * getParam();
}
double doSomething();
}
public class MyProcessorImp extends SomeClass implements MyProcessor
{
double doSomething() {....}
}
<bean class="....MyProcessorImp"> <property name="param" value="3"/></bean>
Bean свойство «пары» не доступны для записи или имеют недопустимый метод установки.
Почему вы хотите, чтобы избежать использования абстрактного класса? Наследование реализации - именно то, для чего предназначены абстрактные классы. Кроме того, вы действительно имели в виду, что 'paramMap' является' static'? Обратите внимание, что это означает, что существует только один параметр paramMap, который разделяется между всеми экземплярами всех классов, реализующих интерфейс. – Jesper
Да, я действительно хотел, чтобы он был статичным, это единственный способ, которым он может работать. у меня возникло чувство, что ответ на мой вопрос будет вопросом, таким как, я не хочу сейчас входить в модель программирования, но просто возьмите его как действительную причину и прочитайте методы java 8 по умолчанию, спросите себя почему он был добавлен как новая архитектурная особенность, и тогда вы можете понять мою причину этого. – Saul
Основная причина, по которой методы по умолчанию были добавлены в Java 8, - это возможность добавлять методы к интерфейсам без нарушения обратной совместимости - не как замена абстрактных классов. – Jesper