[英]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.