匿名内部类是如何在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
提交
取消