我的情况如下:
Class C1 {
public static void main(String[] args) {
Object o = // new object of some class
delegate(new C2() { // C2 is an abstract class or interface
public void delegateLogic() {
Object my_o = o; // refrences main's local variable
// huge method body
// object o local to main is required here
}
});
}
private void delegate(C2 c2) {
// method body
}
}
delegateLogic()的主体变得非常大。对于代码可维护性:
有什么想法吗?
答案 0 :(得分:2)
如果C2成为外部类,那么它必须具有以某种形式传递给它的引用,以便在delegateLogic
中使用它。你真的只有3个选项可以进入你的C2实例:
delegateLogic
您选择哪一项取决于很多事情。
请注意,在类的成员变量中存储对o的引用不会强制您序列化该引用。
答案 1 :(得分:1)
如果您希望C2能够被序列化,只需将o声明为瞬态。但是,如果它被序列化/反序列化,你将需要接受o为null的事实,除非你设法以某种方式手动序列化它。
public class X extends C2 {
private transient Object o;
public X(Object o) {
this.o = o;
}
public void delegateLogic() {
Object my_o = o; // refrences main's local variable
// huge method body
// object o local to main is required here
}
}