代码之家  ›  专栏  ›  技术社区  ›  FrankPl

如何从匿名类设置祖先实例变量?[副本]

  •  2
  • FrankPl  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有一个第三方图书馆的班级,我不能改变,这有一个 protected 实例变量,在实例化时我不会将其设置为非默认值。这个类没有允许我设置这个实例变量的setter或构造函数。

    我试过了

    // The library class I cannot change:
    public class LibraryClass {
        protected boolean instanceVar = false;
    }
    
    // My code:
    public class MyClass {
        LibraryClass myInstance = new LibraryClass() {
            instanceVar = true;
        };
    }
    

    但在第行出现编译器错误“<identifier>expected” instanceVar = true; 是的。我也试图通过 this. super. ,但得到了相同的错误消息。

    当然,我可以创建一个非匿名子类并在其构造函数中设置变量。但是有没有可能直接在匿名类中初始化祖先实例变量?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Thomas Behr    6 年前

    您需要使用实例初始值设定项块:

    LibraryClass myInstance = new LibraryClass() {
        {
            instanceVar = true;
        }
    };
    

    注意另一对大括号。

        2
  •  1
  •   Anatolii    6 年前

    您可以使用初始化块:

    public class MyClass {
        LibraryClass myInstance = new LibraryClass() { 
            {
                instanceVar = true;
            }
        };
    }