java用匿名内部类多吗,Java 匿名内部类

匿名内部类是什么?可能我们用得很多,只是不知道她的芳名。

List nums= Arrays.asList(1, 2, 3);

Collections.sort(nums, new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

return o1 - o2;}

});

使用的Comparator就是一个匿名内部类。new 出来的对象就是一个匿名对象。

既然是匿名类,所以你无法在别的地方使用这个类(实例化,调用它的静态方法之类的), 只能使用一次。

调用其他包的protected方法

2.1 场景:要调用不同包中一个类的protected 方法 且 你不想多写一个类去继承。

2.2 实现:

package com.bds.models;

public class InnerTestInOtherClass {

protected void test(){

System.out.println("这是一个保护方法");

}

}

package com.bds.ozxTest;

public class InnerTestMainClass {

public static void main(String[] args) {

// InnerTestInOtherClass innerTestInOtherClass = new InnerTestInOtherClass();

// innerTestInOtherClass.test(); //无法访问该方法

new InnerTestInOtherClass(){

void superTest(){

super.test();

}

}.superTest();

}

}

当然你可以写个类继承这个类,就能调用父类的protected方法。匿名类更方便,你的目的只是调用这个方法而已 。

63748381ab31

image.png

想复用WebMvcConfigurationSupport的getMessageConverter方法,但是定义为protected方法,所以使用匿名类来调用

Lambda 替代匿名内部类

过去给方法传动态参数的唯一方法是使用内部类。比如

1.Runnable 接口

new Thread(new Runnable() {

@Override

public void run() {

System.out.println("The runable now is using!");

}

}).start();

//用lambda

new Thread(() -> System.out.println("It's a lambda function!")).start();

2.Comperator 接口

List strings = Arrays.asList(1, 2, 3);

Collections.sort(strings, new Comparator() {

@Override

public int compare(Integer o1, Integer o2) {

return o1 - o2;}

});

//Lambda

Collections.sort(strings, (Integer o1, Integer o2) -> o1 - o2);

//分解开

Comparator comperator = (Integer o1, Integer o2) -> o1 - o2;

Collections.sort(strings, comperator);

3.Listener 接口

JButton button = new JButton();

button.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent e) {

e.getItem();

}

});

//lambda

button.addItemListener(e -> e.getItem());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值