带接口的{J}匿名类

时间:2016-06-23 13:10:21

标签: java class interface anonymous

我很长时间没有写Java,需要一些帮助(也许)很简单。

所以我得到了Class,其中声明了Interface

public class test(){

interface Checker(){
 public check();
}

public someFunction(List param1, Checker param2){
   //[do something here]
}
...


public static void main (...){

   someFunction(List param1, new Checker(){
          ...
          //[implementation of interface]
          ...
      });
 }

所以我的问题是,(实际的代码工作正常)

1 我真的没有为什么方法someFunction();期望Interface作为参数

2 我也不明白为什么我可以将Interface的实例传递给function (in main())。我传递someFunction();的第二个参数是Interface的实例,对吧? 嗯,我在想的是,它实际上是某种匿名Class因此它可能是可能的。

但正如我所说,自从我编写java代码以来已经有一段时间了,我还没有找到答案,所以如果有人能够向我解释为什么以及这段代码如何工作,我会非常高兴: )

亲切的问候, 马尔特

3 个答案:

答案 0 :(得分:1)

1)因为根据定义public someFunction(List param1, Checker param2)需要Checker的对象(参见参数2) 2)是的,它是一个匿名类,它的一个实例new Checker()创建了一个传递的类的对象。

因此,代码有效。

答案 1 :(得分:1)

  
      
  1. 我真的不明白,为什么方法someFunction()期望接口作为参数
  2.   

这是开发人员的选择,但是在这里使用接口允许您使用任何实现 - 并且只有接口允许Java中的多种继承。

  
      
  1. 我也不明白为什么我可以将接口的实例传递给该函数(在main()中)。我传递someFunction()的第二个参数是接口的实例,对吧?好吧,我在想的是,它实际上是某种匿名类,因此它可能是可能的。
  2.   

您看到的代码基本上创建了该匿名类的接口和实例的匿名实现。所以你的猜测是正确的。

答案 2 :(得分:0)

我认为公开检查()是一个错字。

  
      
  1. 我真的不明白,为什么方法someFunction()期望接口作为参数
  2.   

为什么不呢?您的界面为Checker,您的方法签名为

public someFunction(List param1, Checker param2)

第二个参数需要Checker

  
      
  1. 我也不明白为什么我可以将一个接口实例传递给该函数(在main()中)。
  2.   

您没有传递接口的实例。您正在通过匿名课程。当你说:

new Checker(){
          ...
          //[implementation of interface]
          ...
      });

您正在实施界面。