Java方法中的匿名内部Comparable类?

时间:2014-04-02 14:26:32

标签: java comparable anonymous-inner-class

我的教授在关于范围和生命周期的练习中提供了这段代码:

class AnonymousInnerClassInMethod {

    public static void main(String[] args) {
        int local = 1;
        Comparable compare = new Comparable () {
            public int compareTo(Object value) {
                return (Integer)value - local;
            }
        };
        System.out.println(compare.compareTo(5));
    }

}

暂且不考虑local无法访问(这是练习)这一事实,并且可比较的参与者(监督?)......我从未见过这种结构并且不知道它甚至可能。

  1. 这样做是为了避免为整个班级扩展Comparable吗?
  2. 如果是这样,为什么?是否更容易/可读/其他什么?
  3. 可以为任何界面编写这种类型的匿名类吗?

2 个答案:

答案 0 :(得分:1)

它允许您在使用被隔离和/或依赖于访问局部变量的特定情况下使用类并覆盖方法。

是否更容易是有些主题和个人品味。但是,这意味着您的代码中的所有内容都已存在,这使您无需浏览到文件中的其他文件或其他位置即可了解所发生的情况。在简单的情况下,如上所述,通常比不必跳过代码库更容易使用。

要使local可访问,需要声明final

具体回答您的问题:

  1. 否;它是匿名扩展另一个类,因此相当于定义一个扩展另一个类的类,因此适用相同的规则。您必须覆盖任何抽象方法。
  2. 它更具可读性,因为它与需要它的代码位于同一位置。
  3. 是的,任何界面或类。

答案 1 :(得分:0)

  1. 无论比较类是否可以在主方法之外访问,肯定会影响范围。
  2. 提高写入能力。恕我直言,牺牲了阅读能力。是的,现在看起来很简单,但是尝试阅读很多类的课程。再一次,是一个意见问题。我们如何做事情是我们通常从匿名或本地类开始,然后随着阅读能力的降低而提升它们。然而,它对于简单的回调非常有用。 Oracle文档提供了一个很好的声明:"如果您只需要使用本地类一次,请使用它们。" Oracle Docs
  3. 是。任何接口或抽象类都可以这种方式使用。