簡體   English   中英

Java編譯器錯誤解惑:“內部類不能有靜態聲明” - 除了簡單類型

[英]Java Compiler error puzzler: “inner classes cannot have static declarations” - except for simple types

編碼時,我遇到了一個奇怪的Java編譯器行為。

在編譯類(下面的源代碼)時,編譯器會在NULL類變量上發出錯誤(“ inner classes cannot have static declarations ”)。 這是預期的!

但是,ZERO類變量不會生成錯誤。 這個我不明白!

為什么這種差異似乎允許內部類中的簡單類型而不是對象的靜態聲明。

(javac -version:1.6.0_24)

public class Outer {
    public static final Runnable HELLO = new Runnable() {
        // No compiler error
        public static final int ZERO = 0;

        // Causes compiler error: "inner classes cannot have static declarations"
        public static final Object NULL = null;

        @Override
        public void run() {
            System.out.println("Hello " + ZERO + NULL);
        }
    };
}

問題是內部類不能有一個靜態初始化塊,這是初始化非平凡常量和非常量所必需的。

暫無
暫無

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

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