在哪里使用本地内部类

时间:2013-02-14 08:29:34

标签: java

请你清楚地解释一下“我们需要在哪里使用当地的内部课程”?

示例:

public class LocalTest
{

    int b=30;
    void display()
    {
        class Local{ 
            void msg()
            {

                 System.out.println(b);
            }       
        }

        Local l = new Local();
        l.msg();
    }

    public static void main(String args[])
    {
        LocalTest lt = new LocalTest();
        lt.display();
    }
}

此处Local class是本地内部类。它仅对display()有用。我们在哪种情况下使用这些本地内部类?

2 个答案:

答案 0 :(得分:0)

主要原因是当我们需要在本地实现某个接口并将其传递到某个地方时,我们希望在实现中添加更多方法,因此匿名实现不适合:

public static void Main (String [] args) throws Exception
{
    class MyRunnable extends Runnable
    {
        private boolean complete = false;

        public synchronized void waitComplete () throws InterruptedException
        {
            while (!complete) wait ();
        }

        @Override
        public void run ()
        {
            // Do something useful

            synchronized (this)
            {
                complete = true;
                notifyAll ();
            }
        }
    }

    MyRunnable r = new MyRunnable ();
    new Thread (r).start ();

    // Do something in parallel with new thread

    r.waitComplete (); // We forgot about Thread.join ()
}

答案 1 :(得分:-1)

我认为它可能有两种用途:

  • 您不希望使用仅在函数内部使用的类来污染相关函数之外的命名空间。
  • 您希望使用函数内声明的任何(final)变量,而不必通过构造函数显式传递它们。