当前位置:  开发笔记 > 编程语言 > 正文

本地类Java的优势

如何解决《本地类Java的优势》经验,为你挑选了3个好方法。

Java中的本地类或使用此功能的任何其他语言的优势是什么?



1> coobird..:

这是一个如何在程序中出现匿名内部类,本地内部类和常规内部类的示例.该示例正在查看类中存在的myMethod方法和类.为了便于讨论,这些类都将实现接口:InnerClassMyClassRunnable

public class MyClass
{
    public void myMethod()
    {
        // Anonymous inner class        
        Runnable r = new Runnable() {
            public void run() {}
        };

        // Local inner class
        class LocalClass implements Runnable
        {
            public void run() {}
        }
    }

    // ... //

    // Inner class
    class InnerClass implements Runnable
    {
        public void run() {}
    }
}

匿名内部类可以用来简单地做一个实现的类Runnable,而不必实际写出来的类,并将其命名,并作为krosenvold在他的文章中提到,它是作为一个在Java中"穷人的关闭".

例如,开始Thread使用匿名内部类的一种非常简单的方法是:

new Thread(new Runnable() {
    public void run()
    {
        // do stuff
    }
}).start();

一个局部内部类可以被用来制造一类是本地范围内-这将无法从以外的其他方法来访问myMethod.

如果有另一种方法,我们试图使该方法的实例LocalClass位于该myMethod方法内,我们将无法这样做:

public void anotherMethod()
{
    // LocalClass is out of scope, so it won't be found,
    // therefore can't instantiate.
    new Thread(new LocalClass()).start();
}

一个内部类是内部类位于类的一部分.因此,举例来说,内类InnerClass可以从其它类通过访问MyClass.InnerClass.当然,它也意味着另一种方法MyClass也可以实例化一个内部类.

public void anotherMethod()
{
    // InnerClass is part of this MyClass. Perfectly instantiable.
    new Thread(new InnerClass()).start();
}

关于匿名内部类和本地内部类的另一个问题是,它将能够访问final在以下内容中声明的变量myMethod:

public void myMethod()
{
    // Variable to access from anonymous and local inner classes.
    final int myNumber = 42;

    // Anonymous inner class        
    Runnable r = new Runnable() {
        public void run()
        {
            System.out.println(myNumber); // Works
        }
    };

    // Local inner class
    class LocalClass implements Runnable
    {
        public void run()
        {
            System.out.println(myNumber); // Works
        }
    }

    // ... //

那么,有什么优势呢?使用匿名内部类和本地内部类而不是具有单独的完整内部类或类将允许前者final在声明它们的方法中访问变量,同时,类是本地的方法本身,因此无法从外部类和同一类中的其他方法访问它.



2> Tom Hawtin -..:

您可以使用匿名内部类无法获得的本地类可以执行许多操作.

因为类型有一个名称,您可以更有用地添加不在超类型中的成员

给定名称可以使堆栈跟踪更容易遵循(特别是对于锁定对象)

子类型多个基类型

在多个地方构建,以及多个构造函数

另一方面,他们使一些可怕的冗长语法更加混乱.



3> geowa4..:

它们允许您从父类中取出逻辑并将其客观化.这将从不属于的地方删除功能并将其放入自己的类中.但是,如果这个新对象仅在短时间内需要,仅在单个代码块的持续时间内怎么办?嗯,这就是本地班级适合的地方.


@belugabob:1.本地类只能在定义它们的方法或构造函数中使用.封闭的班级甚至都看不到它们.嵌套/内部类也可以看到封闭类的私有变量.
它不是对象实例的持续时间,而是它的范围.如果类只需要对父类可见,那么将其设置为本地将阻止它在其他地方使用.此外,本地类可以看到父级的私有成员 - 非本地类不能这样做.
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有