我有这样一个场景:
class ClassB{
ClassB(){
ClassA a = new ClassA(() -> a.foo());
}
}
class ClassA{
ClassA(Runnable onChange) {
}
public void foo(){
System.out.println("Hello");
}
}
我得到“变量'a'可能没有初始化”。我明白为什么会这样。有没有解决的办法或者我必须重新组织我的课程?
2条答案
按热度按时间uidvcgyl1#
我认为你应该考虑重构你的代码并使用不同的方法。没有完整的代码很难说,但我怀疑设计不是最佳的。
说到这里,你可以做一些与你的方法相似的事情。
使classa可运行且抽象:
在classb中,可以实现匿名classa:
tyg4sfes2#
在不更改任何类型的情况下,这应该可以工作:
但是你不能调用你的lambda(
Runnable#run
)在构造函数中,因为a
还是有价值的null
. 只有在构造函数完成之后,才会赋值。另一种可能是使用
Consumer
而不是Runnable
:如果看不到代码的其余部分,就很难给出一个好的解决方案。