簡體   English   中英

如何為 java.util.Arrays.toString 使用 static 導入?

[英]How to use a static import for java.util.Arrays.toString?

考慮以下兩個簡單的 java 代碼片段:

import java.util.Arrays;
class Okay {
    public static void main(String... args) {
        System.out.println(Arrays.toString(new int[0]));
    }
}

這工作正常。 但如果我經常使用 toString,我可能會想使用 static 導入,如下所示:

import static java.util.Arrays.toString;
class DoesNotCompile {
    public static void main(String... args) {
        System.out.println(toString(new int[0]));
    }
}

如果我嘗試這個,Java 認為我正在嘗試從 Object 調用 toString(),然后抱怨 toString 不接受 arguments。 這似乎很愚蠢:我使用的是 static 方法,因此甚至不應該考慮 toString。 (即使在實例方法中,我覺得 Java 應該在這里得到正確的答案。)

有什么辦法可以解決這個問題,或者如果該名稱已經“采用”,static 導入是否不起作用?

不,沒有辦法解決這個問題。

[來自 JLS 15.12,方法調用表達式]( https://docs.oracle.com/javase/specs/jls/se14/html/jls-15.html#jls-15.12 )“。 Class 或搜索接口")

  • 如果form是MethodName,也就是只是一個Identifier,那么:

    如果標識符出現在具有該名稱的方法聲明的 scope 中(第 6.3 節、第 6.4.1 節),則:

    • 如果存在該方法是其成員的封閉類型聲明,則令 T 為最里面的此類類型聲明。 class 或搜索接口是 T。

      這種搜索策略稱為“梳狀規則”。 它有效地在嵌套類的超類層次結構中查找方法,然后在封閉的 class 及其超類層次結構中查找方法。 有關示例,請參見第 6.5.7.1 節。

    • 否則,由於一個或多個單靜態導入或按需靜態導入聲明,方法聲明可能在 scope 中。 沒有 class 或搜索接口,因為要調用的方法稍后確定(第 15.12.2.1 節)。

因此,“本地”方法將始終在 static 導入之前匹配。

暫無
暫無

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

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