Java双大括号_什么是Java中的双BRACE初始化?

ba3a494c9bc4ea871b22e4b9f43ad3ac.png

不负相思意

每当有人使用双支撑初始化时,小猫就会被杀死。除了语法非常不寻常而且不太地道(当然,品味是有争议的)之外,您还不必要地在应用程序中创建了两个重要的问题,我最近在博客上更详细地描述了.1.你创建的匿名类太多了每次使用双大括号初始化时,都会生成一个新类。例如:这个例子:Map source = new HashMap(){{

    put("firstName", "John");

    put("lastName", "Smith");

    put("organizations", new HashMap(){{

        put("0", new HashMap(){{

            put("id", "1234");

        }});

        put("abc", new HashMap(){{

            put("id", "5678");

        }});

    }});}};..将产生以下课程:Test$1$1$1.classTest$1$1$2.classTest$1$1.classTest$1.classTest.class对于您的类加载程序来说,这是相当大的开销-没有!当然,如果你只做一次的话,初始化时间不会很长。但是如果你在整个企业应用程序中这样做了20,000次.所有的堆内存只是为了一点“语法糖”?2.你可能会造成内存泄漏!如果您获取上述代码并从方法中返回该映射,则该方法的调用方可能会对无法被垃圾收集的非常庞大的资源进行管理。考虑以下示例:public class ReallyHeavyObject {

    // Just to illustrate...

    private int[] tonsOfValues;

    private Resource[] tonsOfResources;

    // This method almost does nothing

    public Map quickHarmlessMethod() {

        Map source = new HashMap(){{

            put("firstName", "John");

            put("lastName", "Smith");

            put("organizations", new HashMap(){{

                put("0", new HashMap(){{

                    put("id", "1234");

                }});

                put("abc", new HashMap(){{

                    put("id", "5678");

                }});

            }});

        }};

        return source;

    }}回归Map的实例的引用。ReallyHeavyObject..你可能不想冒这个险:图片来自http:/blog.jooq.org/2014/12/08/不聪明-双花括号-反模式/3.你可以假装Java有地图文字为了回答您的实际问题,人们一直在使用这种语法来假装Java有类似于映射文本的东西,类似于现有的数组文本:String[] array = { "John", "Doe" };Map map = new HashMap() {{ put("John", "Doe"); }};有些人可能会觉得这在句法上很刺激。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值