匿名内部类是如何在Java中使用的?在Java中匿名类的用途是什么?我们可以说使用匿名类是Java的优势之一吗?
4 回答
千万里不及你
TA贡献1784条经验 获得超9个赞
匿名内部类实际上是闭包,因此可以用来模拟lambda表达式或“委托”。例如,以这个接口为例:
public interface F<A, B> {
B f(A a);}您可以使用此匿名创建一级函数在爪哇。假设您有以下方法,它返回比给定列表中的我大的第一个数字,或者如果没有更大的数字,则返回我:
public static int larger(final List<Integer> ns, final int i) {
for (Integer n : ns)
if (n > i)
return n;
return i;}然后,有另一个方法返回比给定列表中的我小的第一个数字,或者,如果没有更小的数字,则返回I:
public static int smaller(final List<Integer> ns, final int i) {
for (Integer n : ns)
if (n < i)
return n;
return i;}这些方法几乎是相同的。使用第一类函数类型F,我们可以将它们重写为一个方法,如下所示:
public static <T> T firstMatch(final List<T> ts, final F<T, Boolean> f, T z) {
for (T t : ts)
if (f.f(t))
return t;
return z;}您可以使用匿名类来使用FirstMatch方法:
F<Integer, Boolean> greaterThanTen = new F<Integer, Boolean> {
Boolean f(final Integer n) {
return n > 10;
}};int moreThanMyFingersCanCount = firstMatch(xs, greaterThanTen, x);这是一个精心设计的例子,但很容易看出,能够像传递值一样传递函数是一个非常有用的特性。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
class A{
public void methodA() {
System.out.println("methodA");
}}class B{
A a = new A() {
public void methodA() {
System.out.println("anonymous methodA");
}
};}interface interfaceA{
public void methodA();}class B{
interfaceA a = new interfaceA() {
public void methodA() {
System.out.println("anonymous methodA implementer");
}
};} interface Foo {
void methodFoo();
}
class B{
void do(Foo f) { }}class A{
void methodA() {
B b = new B();
b.do(new Foo() {
public void methodFoo() {
System.out.println("methodFoo");
}
});
}
}
慕标5832272
TA贡献1966条经验 获得超4个赞
Map map = new HashMap() {{
put("key", "value");}};Map map = new HashMap();map.put("key", "value");添加回答
举报
0/150
提交
取消
