内部类的静态初始化程序?

时间:2012-02-10 09:11:08

标签: java

如何在内部类上允许静态初始化器:

public class MyClass {

    public class InnerClass {
        static {
            // do something
        }
        public bar(){
            // do something
        }
    }

    // method stuff
    public void foo() {
        // do something
    }

} 

3 个答案:

答案 0 :(得分:10)

来自JLS 8.1.3 Inner Classes and Enclosing Instances

  

内部类可能不会声明静态初始化器(第8.7节)或成员接口。

您可能需要的是嵌套类:

public static class InnerClass { // note "static"

答案 1 :(得分:4)

您需要将InnerClass类定义为静态。但是,此后,它不会是一个普通的内部阶级。

答案 2 :(得分:1)

正如@yshavit已经说过的那样,你不能声明静态初始化器,但是从我发现的东西中你可以通过声明一个方法来进行你想要的任何初始化,并在定义类的字段时简单地调用它。例如,我实现了这个迭代器(这是一个匿名的内部类):

public Iterator<String> iterator() {

    return new Iterator<String>() {

        int someField = initializeIterator();

        // Keeps current position in the list of direct neighboring out

        private int initializeIterator() {
            // Do your initializations 
        }

        @Override
        public boolean hasNext() {
            //hasNext implementation
        }

        @Override
        public Vertex next() { 
            //next implementation
         } 
         //...

这感觉非常黑客,我想知道如果我错过了一些东西,但这完全有效,初始化方法只调用一次,就像静态初始化块一样......