gpt4 book ai didi

java - Java 8 默认接口(interface)方法的依赖注入(inject)

转载 作者:搜寻专家 更新时间:2023-10-31 20:33:41 28 4
gpt4 key购买 nike

我有一个使用 Java 8 默认方法定义 setter/getter 的接口(interface),但是当我尝试在 Spring 中连接它时出现错误。我真的想避免使用抽象类,也不想重复代码。这是我正在做的:

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 属性“param”不可写或具有无效的 setter 方法。

最佳答案

在我自己的项目中,我让实现者为我提供 spring 的 DI 容器提供的依赖项。

修改上面的代码,看起来像这样:

public interface MyProcessor {

// get the implementor to get the hash map
WeakHashMap<Function1D, Integer> getParamMap();

default double doSomthingWithParam(double x) {
return doSomething() * getParam();
}

// uses the implementor's getParamMap() to get params
default int getParam() {
return getParamMap().get(this);
}

double doSomething();
}

public class MyProcessorImp extends SomeClass implements MyProcessor {

final WeakHashMap<Function1D, Integer> paramMap = new WeakHashMap<>();

void setParam(int param) {
paramMap.put(this, param);
}

@Override WeakHashMap<Function1D, Integer> getParamMap() {
return paramMap;
}

@Override double doSomething() {
// elided
}
}

关于java - Java 8 默认接口(interface)方法的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30061268/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com