簡體   English   中英

內部類的靜態初始化程序?

[英]Static initializer on a inner class?

如何在內部類上允許靜態初始化程序,如下所示:

public class MyClass {

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

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

} 

JLS 8.1.3內部類和封閉實例

內部類可能不會聲明靜態初始化器(第8.7節)或成員接口。

你可能想要的是一個嵌套類:

public static class InnerClass { // note "static"

您需要將InnerClass類定義為static。 但是,此后,它不會成為常規的內部階級。

正如@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
         } 
         //...

這感覺非常黑客,我想知道如果我錯過了什么,但這完全有效,初始化方法只調用一次,就像靜態初始化塊一樣......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM