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]
...
});
}
所以我的问题是,(实际代码工作正常)
我真的不明白为什么方法someFunction();
需要一个Interface
作为参数
我也不明白为什么我可以将接口的实例传递给那个函数(in
main()). 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() 是一个错字。
- i really dont get, WHY the method someFunction() expects a Interface as parameter
为什么不呢?您的接口是Checker
,您的方法签名是
public someFunction(List param1, Checker param2)
第二个参数采用Checker
。
- i also dont understand WHY i can pass an instance of an interface to that function (in main()).
您没有传递接口实例。您传递的是匿名 class。当你说:
new Checker(){
...
//[implementation of interface]
...
});
您正在实现接口。
- i really dont get, WHY the method someFunction() expects a Interface as parameter
这是开发人员的选择,但在此处使用接口允许您使用任何实现 - 只有接口允许在 Java 中进行某种多重继承。
- 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。所以你的猜测在这里是正确的。
我已经很长时间没有写 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]
...
});
}
所以我的问题是,(实际代码工作正常)
我真的不明白为什么方法
someFunction();
需要一个Interface
作为参数我也不明白为什么我可以将接口的实例传递给那个函数
(in
main()). 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() 是一个错字。
- i really dont get, WHY the method someFunction() expects a Interface as parameter
为什么不呢?您的接口是Checker
,您的方法签名是
public someFunction(List param1, Checker param2)
第二个参数采用Checker
。
- i also dont understand WHY i can pass an instance of an interface to that function (in main()).
您没有传递接口实例。您传递的是匿名 class。当你说:
new Checker(){
...
//[implementation of interface]
...
});
您正在实现接口。
- i really dont get, WHY the method someFunction() expects a Interface as parameter
这是开发人员的选择,但在此处使用接口允许您使用任何实现 - 只有接口允许在 Java 中进行某种多重继承。
- 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。所以你的猜测在这里是正确的。