s********e 发帖数: 340 | 1 我前几天面试,被问到Java 匿名内部类:
1. 什么情况下用到匿名内部类?(我的理解是他想问为什么需要使用匿名内部类)
2. 如何找到匿名内部类的对象,他说,因为是匿名的,那么在匿名内部类产生对象后
, 我如何找到这个匿名的内部类对象?
第2个问题,我尤其不太明白答案。
请教大家这两个问题,欢迎讨论! |
z****e 发帖数: 54598 | 2 java的基本概念,虽然用得不多
大部分java教材都会保函有ui部分,这个在ui上大量出现
可能因为最近java8出来了之后,加了default关键字
以及lambda,所以这个东西又被拿出来说
以前1.4时代常见的面试题
java是完全的oo语言,所以不存在有类外部的定义
所有方法和变量都必需写在类里面,包括static变量和方法
那有些时候你需要一些临时的用完一次就不再用的类
把它单独写成一个class就显得麻烦
所以直接用匿名类包装一下,扔给一个object就好了
匿名的是类不是匿名对象,当然可以找到那个对象
如果非要纠结,那就是通过找匿名类的父类来定位
java对象声明不是需要先把对象类给写在前面么?
匿名类的变量声明前面放的是它父类的名字
一般父类是一个接口或者抽象类 |
s********e 发帖数: 340 | 3 谢谢回复!
关于第一个问题,我也是回到说是在Swing UI开发中常用到匿名内部类,我感觉我的回
到不是他期望的,他承认我说的对,但是问我还有没有其他的例子,我就想不起来了。
第二个问题,我也是说了如果引用内部类,就是" 外部类.内部类'' 的方式,但是
他反复说,既然是匿名,那又如何知道内部类的名字呢? 没有名字,怎么能用这种方
式去找到呢?
【在 z****e 的大作中提到】 : java的基本概念,虽然用得不多 : 大部分java教材都会保函有ui部分,这个在ui上大量出现 : 可能因为最近java8出来了之后,加了default关键字 : 以及lambda,所以这个东西又被拿出来说 : 以前1.4时代常见的面试题 : java是完全的oo语言,所以不存在有类外部的定义 : 所有方法和变量都必需写在类里面,包括static变量和方法 : 那有些时候你需要一些临时的用完一次就不再用的类 : 把它单独写成一个class就显得麻烦 : 所以直接用匿名类包装一下,扔给一个object就好了
|
s********e 发帖数: 340 | 4 谢谢回复!
关于第一个问题,我也是回到说是在Swing UI开发中常用到匿名内部类,我感觉我的回
到不是他期望的,他承认我说的对,但是问我还有没有其他的例子,我就想不起来了。
第二个问题,我也是说了如果引用内部类,就是" 外部类.内部类'' 的方式,但是
他反复说,既然是匿名,那又如何知道内部类的名字呢? 没有名字,怎么能用这种方
式去找到呢?
【在 z****e 的大作中提到】 : java的基本概念,虽然用得不多 : 大部分java教材都会保函有ui部分,这个在ui上大量出现 : 可能因为最近java8出来了之后,加了default关键字 : 以及lambda,所以这个东西又被拿出来说 : 以前1.4时代常见的面试题 : java是完全的oo语言,所以不存在有类外部的定义 : 所有方法和变量都必需写在类里面,包括static变量和方法 : 那有些时候你需要一些临时的用完一次就不再用的类 : 把它单独写成一个class就显得麻烦 : 所以直接用匿名类包装一下,扔给一个object就好了
|
z****e 发帖数: 54598 | 5 第一个有些难了,标准答案可能是要用lambda时候用匿名类
第二个不需要知道内部类名字,只需要知道接口或者抽象类的名字
每次使用,都需要把类的implementation/实现紧跟在定义后面
进阶就说java8里面这个可以用lambda表达式,也就是->
【在 s********e 的大作中提到】 : 谢谢回复! : 关于第一个问题,我也是回到说是在Swing UI开发中常用到匿名内部类,我感觉我的回 : 到不是他期望的,他承认我说的对,但是问我还有没有其他的例子,我就想不起来了。 : 第二个问题,我也是说了如果引用内部类,就是" 外部类.内部类'' 的方式,但是 : 他反复说,既然是匿名,那又如何知道内部类的名字呢? 没有名字,怎么能用这种方 : 式去找到呢?
|
s********e 发帖数: 340 | 6 谢谢,Java的 Lambda表达式,我需要去看一下。
关于第二个,我还是有点不太明白,比如:
Class OuterClass (){
public void abc(){
new InnerInterface(){
public inntermethod(){
.....
}
}
}
}
这个InnerInterface接口就产生了一个匿名内部类对象,这个匿名内部类对象该如何找
到?
【在 z****e 的大作中提到】 : 第一个有些难了,标准答案可能是要用lambda时候用匿名类 : 第二个不需要知道内部类名字,只需要知道接口或者抽象类的名字 : 每次使用,都需要把类的implementation/实现紧跟在定义后面 : 进阶就说java8里面这个可以用lambda表达式,也就是->
|
z****e 发帖数: 54598 | 7 InnerInterface innerInterface = new InnerInterface(){
@Override
public void innterMethod(){...}
};
...
innerInterface.innerMethod();
... |
Y*****y 发帖数: 361 | 8 lambda和anonymous class都会compile成一个outerclass$XXX形式的样子,那个XXX一
般是很奇怪的名字。
【在 s********e 的大作中提到】 : 谢谢,Java的 Lambda表达式,我需要去看一下。 : 关于第二个,我还是有点不太明白,比如: : Class OuterClass (){ : public void abc(){ : new InnerInterface(){ : public inntermethod(){ : ..... : } : } : }
|
s********e 发帖数: 340 | 9 谢谢! 看来我要好好研究一下Lambda!
【在 Y*****y 的大作中提到】 : lambda和anonymous class都会compile成一个outerclass$XXX形式的样子,那个XXX一 : 般是很奇怪的名字。
|
g*****g 发帖数: 34805 | 10 匿名内部类是因为没有 lamda,而之所以这样就是因为其他地方不需要引用,这样写简
洁。外部既然不能访问问外部怎么访问就是个错误命题了。 |
c***n 发帖数: 809 | 11 匿名内部类好处是相关code在一起,一个简单的interface implemetation,
别的地方又不重复利用。 常用在callback/strategy之类的class里。
还有一个好出是可以access outer class的变量, 没必要些那些boilerplate
【在 s********e 的大作中提到】 : 我前几天面试,被问到Java 匿名内部类: : 1. 什么情况下用到匿名内部类?(我的理解是他想问为什么需要使用匿名内部类) : 2. 如何找到匿名内部类的对象,他说,因为是匿名的,那么在匿名内部类产生对象后 : , 我如何找到这个匿名的内部类对象? : 第2个问题,我尤其不太明白答案。 : 请教大家这两个问题,欢迎讨论!
|