zoukankan      html  css  js  c++  java
  • 使用new Xxx(){};这种语法创建对象的语义解析

    在看Java并发编程实战这本书的时候,看到一个代码如下

    /**
     * ConnectionDispenser
     * <p/>
     * Using ThreadLocal to ensure thread confinement
     *
     * @author Brian Goetz and Tim Peierls
     */
    public class ConnectionDispenser {
        static String DB_URL = "jdbc:mysql://localhost/mydatabase";
    
        private ThreadLocal<Connection> connectionHolder
                = new ThreadLocal<Connection>() {
                    public Connection initialValue() {
                        try {
                            return DriverManager.getConnection(DB_URL);
                        } catch (SQLException e) {
                            throw new RuntimeException("Unable to acquire Connection, e");
                        }
                    };
                };
    
        public Connection getConnection() {
            return connectionHolder.get();
        }
    }

    这种在构造器声明后面直接接一个{}代码块的方法感觉以前好像见过,但是又不太确定,因为不属于匿名内部类的写法。于是在网上搜到一篇博客,做个记录,如下,解决了疑惑,其实这样的写法是对方法进行了重写。因为ThreadLocal里是有initialValue()这个方法的,会在初次调用ThreadLocal.get()方法的时候调用该方法来获取初始值。只不过书里的这个代码示例没有加@Override的注解标识,导致我有些误解,以为是直接新加了一个方法,想着也没有这样的语法啊,所以导致不理解。

    另外还有一个嵌入静态代码块的方法也可以用这种类似的写法,下面这个博客的博主也提到了(重要,比较优美的写法)

    https://blog.csdn.net/shenhaiyushitiaoyu/article/details/84142618

  • 相关阅读:
    【笔记】算法图解
    redis两个主同时挂
    redis有间隔的kill 两个主:
    数据中心机房燃气分布式能源系统的作用是什么?
    C# DEBUG 调试信息打印及输出详解
    C# DEBUG 调试信息打印及输出详解
    C# DEBUG 调试信息打印及输出详解
    C# DEBUG 调试信息打印及输出详解
    多态中的题目分析题
    多态中的题目分析题
  • 原文地址:https://www.cnblogs.com/skyvalley/p/15335840.html
Copyright © 2011-2022 走看看