gpt4 book ai didi

Java 包装器 : overriding a method called in the super constructor

转载 作者:搜寻专家 更新时间:2023-11-01 03:23:18 24 4
gpt4 key购买 nike

我想用Java包装一个类,但问题如下:

public class A {

public A() {
doSomething();
}

public void doSomething() {
}

}

现在当我尝试包装这个类并将所有方法委托(delegate)给包装器时

public class Wrapper extends A {

private final A a;

public Wrapper(A a) {
super();
this.a = a;
}

@Override
public void doSomething() {
this.a.doSomeThing();
}


}

当然我得到一个 NPE,因为 'a' 仍然是 null,因为它是在调用覆盖的 doSomething() 方法的 super() 调用之后设置的。这个问题有什么解决办法吗?我唯一想到的是制作一个工厂方法并设置一个静态变量来保存对 a 的引用,但这对我来说似乎很难看。

最佳答案

我建议更改代码,以便在构造函数中不调用 doSomething。

或者将A拆成一个接口(interface)和实现Wrapper实现接口(interface),不继承A

public interface IA {

public void doSomething() {
}

}
public class A implements IA {

public A() {
doSomething();
}

public void doSomething() {
}

}


public class Wrapper implements IA {

private final IA a;

public Wrapper(IA a) {
this.a = a;
doSomething();
}

@Override
public void doSomething() {
a.doSomeThing();
}
}

关于Java 包装器 : overriding a method called in the super constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22983715/

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