静态嵌套接口的内联实现
Inline implementation of static nested interfaces
View.setOnClickListener( new View.OnClickListener(){
@override
public void onClick(View view){
//Some code implementing this method
}
});
这里OnClickListener
是View内部声明的静态Interface。由于它是静态的,因此不会被归类为内部 class(如果我在这里错了请纠正我)。
那我们如何使用匿名class内联实现这个静态嵌套接口呢?
因为,据我所知,它们仅用于内联实现内部 classes,这些嵌套类型没有封闭类型的 static 关键字。
首先:内部接口默认是"static"。不可能有一个 "inner" 接口不是静态的!有关这方面的更多想法,请参阅 。
从这个角度来看,接口就是:接口。无论它们是位于自己的 .java 文件中的顶级界面,还是位于某个 class 左右的界面中,都没有关系。
并且可以使用匿名内部实现任何接口class。
仅此而已。
回复评论:
so the inline implementation ie the anonymous class itself becomes an inner class of the interface it implements?
不,匿名内部 class 是环绕它的 class 的内部 class。它恰好实现了一些接口。它不是接口的内部 class。内部的真正含义是 "physical",就像位于 内部 其他代码块中的代码行一样。
class Outer {
class/interface Inner {
Inner
被称为内部 class/interface 因为它生活在 内部 Outer
。
View.setOnClickListener( new View.OnClickListener(){
@override
public void onClick(View view){
//Some code implementing this method
}
});
这里OnClickListener
是View内部声明的静态Interface。由于它是静态的,因此不会被归类为内部 class(如果我在这里错了请纠正我)。
那我们如何使用匿名class内联实现这个静态嵌套接口呢?
因为,据我所知,它们仅用于内联实现内部 classes,这些嵌套类型没有封闭类型的 static 关键字。
首先:内部接口默认是"static"。不可能有一个 "inner" 接口不是静态的!有关这方面的更多想法,请参阅
从这个角度来看,接口就是:接口。无论它们是位于自己的 .java 文件中的顶级界面,还是位于某个 class 左右的界面中,都没有关系。
并且可以使用匿名内部实现任何接口class。
仅此而已。
回复评论:
so the inline implementation ie the anonymous class itself becomes an inner class of the interface it implements?
不,匿名内部 class 是环绕它的 class 的内部 class。它恰好实现了一些接口。它不是接口的内部 class。内部的真正含义是 "physical",就像位于 内部 其他代码块中的代码行一样。
class Outer {
class/interface Inner {
Inner
被称为内部 class/interface 因为它生活在 内部 Outer
。