Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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,考虑到OnCompleteListener是一个接口,OnCompleteListeneImpl是一个具体的类,如下所示 ####OnCompleteListener接口##### public interface OnCompleteListener { public void onComplete(); } class OnCompleteListenerImpl implements OnCompleteListener { public void onComplet

考虑到OnCompleteListener是一个接口,OnCompleteListeneImpl是一个具体的类,如下所示

####OnCompleteListener接口#####

public interface OnCompleteListener {

    public void onComplete();
}
class OnCompleteListenerImpl  implements OnCompleteListener {
    public void onComplete() {    
        System.out.println("Yeah, the long running task has been completed!");
    }
}
longRunningTask.setOnCompleteListener(new OnCompleteListener() {

        @Override
        public void onComplete() {
            System.out.println("Yeah, the long running task has been completed!");
        }
    }
);
OnCompleteListenerImpl obj = new OnCompleteListenerImpl();

longRunningTask.setOnCompleteListener(obj);
#####OnCompleteListenerImpl####

public interface OnCompleteListener {

    public void onComplete();
}
class OnCompleteListenerImpl  implements OnCompleteListener {
    public void onComplete() {    
        System.out.println("Yeah, the long running task has been completed!");
    }
}
longRunningTask.setOnCompleteListener(new OnCompleteListener() {

        @Override
        public void onComplete() {
            System.out.println("Yeah, the long running task has been completed!");
        }
    }
);
OnCompleteListenerImpl obj = new OnCompleteListenerImpl();

longRunningTask.setOnCompleteListener(obj);
这是怎么回事

#####片段A####

public interface OnCompleteListener {

    public void onComplete();
}
class OnCompleteListenerImpl  implements OnCompleteListener {
    public void onComplete() {    
        System.out.println("Yeah, the long running task has been completed!");
    }
}
longRunningTask.setOnCompleteListener(new OnCompleteListener() {

        @Override
        public void onComplete() {
            System.out.println("Yeah, the long running task has been completed!");
        }
    }
);
OnCompleteListenerImpl obj = new OnCompleteListenerImpl();

longRunningTask.setOnCompleteListener(obj);
不同于

#####片段B#####

public interface OnCompleteListener {

    public void onComplete();
}
class OnCompleteListenerImpl  implements OnCompleteListener {
    public void onComplete() {    
        System.out.println("Yeah, the long running task has been completed!");
    }
}
longRunningTask.setOnCompleteListener(new OnCompleteListener() {

        @Override
        public void onComplete() {
            System.out.println("Yeah, the long running task has been completed!");
        }
    }
);
OnCompleteListenerImpl obj = new OnCompleteListenerImpl();

longRunningTask.setOnCompleteListener(obj);

这两种方法都很相似,但它们之间有很大的区别

可用性

public interface OnCompleteListener {

    public void onComplete();
}
class OnCompleteListenerImpl  implements OnCompleteListener {
    public void onComplete() {    
        System.out.println("Yeah, the long running task has been completed!");
    }
}
longRunningTask.setOnCompleteListener(new OnCompleteListener() {

        @Override
        public void onComplete() {
            System.out.println("Yeah, the long running task has been completed!");
        }
    }
);
OnCompleteListenerImpl obj = new OnCompleteListenerImpl();

longRunningTask.setOnCompleteListener(obj);
  • 类OnCompleteListenerImpl是可重用的,您不需要在多个位置重写同一对象
  • 初始化OnCompleteListenerImpl对象时需要小心,因为可以通过多种方式进行初始化,所以必须小心其范围
  • 如果使用匿名方法,则无需创建新的实现类

  • 总之,这两种方法都有不同的用例,您需要遵循哪种方法。对于干净的代码和可重用性,我们使用实现类,但对于安全和单实例使用,您可以使用匿名类方法。

    这是相同的。如果您多次使用它,请选择OnCompleteListenerImpl解决方案。大致相同,尽管
    Snippet A
    正在创建一个匿名类,而不是命名类。。。。你可能想看看和