Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在没有内部类的情况下进行更改?_Java - Fatal编程技术网

Java 如何在没有内部类的情况下进行更改?

Java 如何在没有内部类的情况下进行更改?,java,Java,我有一个如下的例子。它使用两个内部类,可以直接访问其封闭实例的方法和字段。不使用内部类有意义吗?以及如何修改它 package java_example150; public class TestThread3{ private int j; public static void main(String[] args){ TestThread3 t = new TestThread3(); Inc inc = t.new Inc();

我有一个如下的例子。它使用两个内部类,可以直接访问其封闭实例的方法和字段。不使用内部类有意义吗?以及如何修改它

package java_example150;

public class TestThread3{
    private int j;
    public static void main(String[] args){
        TestThread3 t = new TestThread3();
        Inc inc = t.new Inc();
        Dec dec = t.new Dec();

        for(int i=0;i<2;i++){
          Thread ts = new Thread(inc);
          ts.start();
          ts= new Thread(dec);
          ts.start();
        }
    }

    private synchronized void inc(){
        j++;
        System.out.println(Thread.currentThread().getName()+"-inc:"+j);
    }

    private synchronized void dec(){
        j--;
        System.out.println(Thread.currentThread().getName()+"-dec:"+j);
    }

    class Inc implements Runnable{
       public void run(){
        for(int i=0;i<10;i++){
         inc();
        }
       }
    }

    class Dec implements Runnable{
         public void run(){
          for(int i=0;i<10;i++){
           dec();
          }
         }
    }

}
包java\u示例150;
公共类TestThread3{
私人int j;
公共静态void main(字符串[]args){
TestThread3 t=新的TestThread3();
Inc Inc=t.new Inc();
Dec-Dec=t.new-Dec();

对于(int i=0;i在您的示例中,我认为没有必要对其进行重构。您可以不进行重构。当内部类仅对另一个类是必需的,并且它们只能由该类访问/实例化时,可以使用内部类


如果您在另一个类中需要相同的功能,您可以重构它并将这些类移动到单独的文件中。

线程需要有一个
Runnable
类型作为线程的入口点传入。内部类是一种很好的方法

使用匿名类可能有意义(特别是在这个简短的示例中)。您可以像这样重写循环:

for(int i=0;i<2;i++){
    Thread ts = new Thread(new Runnable() {
        public void run() {
            for(int i = 0; i < 10; i++) inc();
        }    
    );

    ts.start();
    ts= new Thread(new Runnable() {
        public void run() {
            for(int i = 0; i < 10; i++) dec();
        }    
    );
    ts.start();
}

for(int i=0;i当您试图使用非内部类时发生了什么?您试图通过避免内部类来解决什么困难


您可以转换为非内部类;只需将TestThread3的实例传递给每个对象。

如何将TestThread3的实例传递给每个对象?我很困惑。您能给我看一下代码吗?