我很长时间没有写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代码以来已经有一段时间了,我还没有找到答案,所以如果有人能够向我解释为什么以及这段代码如何工作,我会非常高兴: )
亲切的问候, 马尔特
答案 0 :(得分:1)
1)因为根据定义public someFunction(List param1, Checker param2)
需要Checker的对象(参见参数2)
2)是的,它是一个匿名类,它的一个实例new Checker()
创建了一个传递的类的对象。
因此,代码有效。
答案 1 :(得分:1)
- 我真的不明白,为什么方法someFunction()期望接口作为参数
醇>
这是开发人员的选择,但是在这里使用接口允许您使用任何实现 - 并且只有接口允许Java中的多种继承。
- 我也不明白为什么我可以将接口的实例传递给该函数(在main()中)。我传递someFunction()的第二个参数是接口的实例,对吧?好吧,我在想的是,它实际上是某种匿名类,因此它可能是可能的。
醇>
您看到的代码基本上创建了该匿名类的接口和实例的匿名实现。所以你的猜测是正确的。
答案 2 :(得分:0)
我认为公开检查()是一个错字。
- 我真的不明白,为什么方法someFunction()期望接口作为参数
醇>
为什么不呢?您的界面为Checker
,您的方法签名为
public someFunction(List param1, Checker param2)
第二个参数需要Checker
。
- 我也不明白为什么我可以将一个接口实例传递给该函数(在main()中)。
醇>
您没有传递接口的实例。您正在通过匿名课程。当你说:
new Checker(){
...
//[implementation of interface]
...
});
您正在实施界面。