奇怪的Java代码:类中的类

时间:2010-04-16 10:51:45

标签: java oop class conventions

在一些示例代码中,有一些方法和类在其他方法和/或类中声明。

我从未听说过/读过这个。这种编程有什么影响?在一个单独的文件和方法中并排写下类而不是彼此之间(就像每本书都告诉你的那样)不是更好吗?这种编程有哪些优点和缺点?

这是我的意思的一个例子:

Handler mHandler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        TextView textView = (TextView) findViewById(R.id.description);
        textView.setText(mRoad.mName + " " + mRoad.mDescription);
        MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);
        mapView.invalidate();
    }
};

7 个答案:

答案 0 :(得分:6)

类中可以有两种类:内部类和匿名类。

两者主要用于创建不单独工作但需要访问周围对象的类。这些类具有对整个周围对象的完全访问权限(例外:静态内部类的定义)。

答案 1 :(得分:4)

这被称为匿名内部类。假设您只在一个地方使用该类,并且该类简短,那么创建公共类可能没有意义。

This page包含有关匿名内部类的更多信息。

答案 2 :(得分:2)

Here是对匿名课程的一个很好的解读,以及它们为什么有用。它主要用于类的实现非常短并且不能在其他任何地方重用的场景。通过使用此匿名实现,您可以保持代码简洁明了。

答案 3 :(得分:2)

在定义您正在使用的接口的小实现时,匿名类很常见,例如EventListeners。有一点需要注意的是,除非它们被声明为final,否则你将无法访问局部变量(和参数)。

答案 4 :(得分:1)

是的,这叫做:匿名课。

您可以在此处详细了解: http://docstore.mik.ua/orelly/java-ent/jnut/ch03_12.htm

答案 5 :(得分:1)

内部类还具有能够在没有显式指针的情况下引用容器类的优点。

匿名只是一个简洁的问题。

答案 6 :(得分:1)

其中一个公共示例是监听器实现:

class myPanel extends JPanel {
    public MyPanel() {
        JButton b1 = new JButton("Hello");
        b1.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    // do something for button b1
                }
            }
        );
    }
}

现在假设Listener实现可以依赖于某些外部类(myPanel)属性。 使用匿名类您可以轻松地执行此操作。