Java 匿名类双大括号初始化

2023-04-10 19:25:25

Java 匿名类双大括号初始化
创建匿名类的方式一般是 new 后面跟一个接口名,然后去实现该接口
例如现将一个基于 Runnable 接口的对象,放入 Thread 中:

public class Main {

public static void main(String[] args) throws InterruptedException {

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("hi");
        }
    });

    t.start();
    t.join();
}

}
运行上面的代码,会输入hi。

new 后面也可以跟一个具体的类名,然后重新实现类中的方法
示例:

import java.util.HashMap;
import java.util.Map;

public class Main {

public static void main(String[] args) throws InterruptedException {

    Map<String, String> map = new HashMap<String, String>() {
        @Override
        public String put(String key, String value) {
            System.out.println("调用了 put 方法");
            return super.put(key, value);
        }
    };

    map.put("a", "1");
    map.put("b", "2");

    System.out.println( map );
}

}

运行代码,输出:

调用了 put 方法
调用了 put 方法
{a=1, b=2}
new 后面跟一个具体的类名,可以用双大括号初始化对象的内容
例如:

import java.util.HashMap;
import java.util.Map;

public class Main {

public static void main(String[] args) {

    Map<String, String> map = new HashMap<String, String>() {{ // 注意,这里用了双大括号
        put("a", "1");
        put("b", "2");
    }};

    System.out.println(map);

}

}

运行后输出:

{a=1, b=2}
上面的代码中,map 是一个基于 HashMap 的匿名类生成的对象。通过两个大括号,直接调用 put 方法(可以理解为在匿名类的内部编写代码),初始化对象的数据。

注意,双大括号并不是特殊的语法。类的实现需要一层大括号,匿名类的初始化需要一层大括号,如果只做初始化就是双大括号。

如果重写函数,就不是双大括号了:

HashMap<String, String> map = new HashMap<String, String>() {
// 初始化
{
put(“name”, “b”);
put(“age”, “18”);
}
// 重写 put 方法
@Override
public String put(String key, String value) {
System.out.println(“调用了 put 方法”);
return super.put(key, value);
}
};

( 本文完 )

  • 作者:IT胖毛
  • 原文链接:https://blog.csdn.net/qq_33859426/article/details/121921944
    更新时间:2023-04-10 19:25:25