我对理解一些Java代码有疑问

时间:2011-06-03 07:00:07

标签: java

守则:

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表示什么?是简单的类名还是具有一定意义?

3 个答案:

答案 0 :(得分:5)

我怀疑这是反编译的代码。 (有关详细信息,请参阅底部。)$表示它是RapidSpellChecker中的嵌套类。所以代码最初看起来像这样:

public class RapidSpellChecker
{
    // Other code withing RapidSpellChecker

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

我已将其显示为 static 嵌套类,因为您显示的代码没有对RapidSpellChecker实例的任何隐式引用。如果是这样,原始代码将是这样的:

public class RapidSpellChecker
{
    // Other code withing RapidSpellChecker

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

在这种情况下,它是内部类

有关详细信息,请参阅Java tutorial on nested classes


编辑:我原本以为这是无效代码;你不能在Java中使用$中的标识符来开始。事实证明我错了。来自Java Language Specification, section 3.8

  

$字符只能用于机械生成的源代码,或者很少用于访问旧系统上预先存在的名称。

所以这是有效的,只是气馁。

答案 1 :(得分:2)

这是一个嵌套类。当Java编译器使用嵌套类编译一个类时,它会将它们全部分成不同的.class文件。

class A {
  class B {
  }
}

给出A.class和A $ B.class

答案 2 :(得分:1)

如果需要,可以在变量名中使用$。在变量名中,它没有特殊意义。

$通常也用于在使用javac

进行编译时指示内部类

如果你编译

class A {
    class B {
    }
}

您将看到A.class已创建且B.class。

为了娱乐和娱乐,您可以在Java中创建令人困惑的“JQuery” - 代码(您需要使用静态导入来使用$静态方法)。请参阅以下示例:

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库实现它将是一个有趣的项目!