Java 匿名 Class 有接口

Java Anonymous Class with Interface

我已经很长时间没有写 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. 我也不明白为什么我可以将接口的实例传递给那个函数(inmain()). The second argument that I'm passing the someFunction();`,是一个接口的实例,对吧? 好吧,我在想的是,它实际上是某种匿名的 class,因此它可能是可能的。

但正如我所说,自从我编写 java 代码以来已经有一段时间了,我还没有找到答案,所以如果有人能向我解释为什么以及如何这样做,我将不胜感激一段代码正在运行。

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

因此,代码有效。

我假设 public check() 是一个错字。

  1. i really dont get, WHY the method someFunction() expects a Interface as parameter

为什么不呢?您的接口是Checker,您的方法签名是

public someFunction(List param1, Checker param2)

第二个参数采用Checker

  1. i also dont understand WHY i can pass an instance of an interface to that function (in main()).

您没有传递接口实例。您传递的是匿名 class。当你说:

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

您正在实现接口。

  1. i really dont get, WHY the method someFunction() expects a Interface as parameter

这是开发人员的选择,但在此处使用接口允许您使用任何实现 - 只有接口允许在 Java 中进行某种多重继承。

  1. i also dont understand WHY i can pass an instance of an interface to that function (in main()). The second argument that i'm passing the someFunction(), is an instance of an interface, right? Well, what i was thinking of, is that it actually is some kind of anonymous Class and therefore it might be possible.

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