簡體   English   中英

我對理解一些 Java 代碼有疑問

[英]I Have a problem with understanding some Java code

編碼:

package com.keyoti.rapidSpell;

import java.util.Comparator;

// Referenced classes of package com.keyoti.rapidSpell:
//            RapidSpellChecker

class RapidSpellChecker$CompareL
    implements Comparator
{

    public int compare(Object a, Object b)
    {
        return (int)(100D * (suggestionScore2b(topWord, (String)b) - suggestionScore2b(topWord, (String)a)));
    }

    public void with(String w)
    {
        topWord = w;
    }

    private String topWord;

    RapidSpellChecker$CompareL()
    {
    }
}

這是應用程序中的眾多類之一。

class RapidSpellChecker$CompareL implements Comparator中的$符號是什么意思?它只是 class 名稱還是有什么意義?

我懷疑這是反編譯的代碼。 (有關更多信息,請參閱底部。) $ 表示它是 RapidSpellChecker 內的嵌套RapidSpellChecker 所以代碼最初看起來像這樣:

public class RapidSpellChecker
{
    // Other code withing RapidSpellChecker

    static class CompareL implements Comparator
    {
        // Code for compare, with etc
    }
}

我已將其顯示為嵌套 class 的static ,因為您顯示的代碼沒有對RapidSpellChecker實例的任何隱式引用。 如果是這樣,原始代碼將是這樣的:

public class RapidSpellChecker
{
    // Other code withing RapidSpellChecker

    class CompareL implements Comparator
    {
        // Code for compare, with etc
    }
}

在這種情況下,它是一個內部 class

有關更多信息,請參閱有關嵌套類的 Java 教程


編輯:我最初認為這是無效代碼; 你不能在 Java 的標識符中使用 $ 開始。 事實證明我錯了。 來自Java 語言規范,第 3.8 節

$ 字符應僅用於機械生成的源代碼中,或者很少用於訪問遺留系統上預先存在的名稱。

所以它是有效的,只是氣餒。

那是一個嵌套的 class。 當 Java 編譯器編譯帶有嵌套類的 class 時,它將所有這些類分隔在不同的.class 文件中。

class A {
  class B {
  }
}

給出 A.class 和 A$B.class

如果需要,可以在變量名中使用$ 在變量名中它沒有特殊意義。

$也通常用於在使用javac編譯時指示內部類

如果你編譯

class A {
    class B {
    }
}

您將看到創建了 A.class 和 B.class。

為了有趣和娛樂,您可以在 Java 中創建看起來令人困惑的“JQuery”式代碼(您需要 static 導入才能使用$ ZA81259CEF8E959C624DF1D456E5D3297 方法)。 請參見下面的示例:

import static thisPackage.*;

public class $ {
    public static $ $(String s) { return new $(s); }
    public $ fadeIn(int fade) { return this; }
    public $ slideUp(int slide) { return this; }
    public $ delay(int ms) { return this; }
    public $(String s) { }

    public static void main(String[] args) {
       $("#foo").slideUp(300).delay(800).fadeIn(400);
    }
} 

用下面的 DOM 庫來實現這個將是一個有趣的項目!

暫無
暫無

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

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