Final-Metaverse-Fantasy
全部标签 在Java中,为什么最好声明一个记录器staticfinal?privatestaticfinalLoggerS_LOGGER 最佳答案 private-这样没有其他类可以劫持您的记录器static-因此每个类只有一个记录器实例,同时也避免尝试序列化记录器final-在类的生命周期内无需更改记录器另外,我更喜欢名称log尽可能简单,但具有描述性。编辑:但是,这些规则有一个有趣的异常(exception):protectedfinalLoggerlog=LoggerFactory.getLogger(getClass());相对于:p
我发现了一些建议尽可能使用final的引用资料(forexample),我想知道这有多重要。这主要是在方法参数和局部变量的上下文中,而不是final方法或类。对于常量,这显然是有意义的。一方面,编译器可以进行一些优化,让程序员的意图更加清晰。另一方面,它增加了冗长,优化可能是微不足道的。这是我应该努力记住的吗? 最佳答案 沉迷于:Final字段-将字段标记为final会强制它们在构造结束时设置,使该字段引用不可变。这允许安全地发布字段,并且可以避免在以后读取时需要同步。(请注意,对于对象引用,只有字段引用是不可变的-对象引用所引用的
这个问题在这里已经有了答案:WhatisaserialVersionUIDandwhyshouldIuseit?(25个回答)关闭4年前。我有标题中给出的警告信息。我想了解并删除它。我已经找到了关于这个问题的一些答案,但由于技术术语过多,我不理解这些答案。能不能用简单的话来解释这个问题?附:我知道OOP是什么。我知道什么是对象、类、方法、字段和实例化。附言如果有人需要我的代码,就在这里:importjava.awt.*;importjavax.swing.*;publicclassHelloWorldSwingextendsJFrame{JTextAream_resultArea=ne
C++11中final关键字的作用是什么?我知道它可以防止派生类覆盖函数,但如果是这种情况,那么将final函数声明为非虚拟还不够吗?我还有什么遗漏的吗? 最佳答案 正如idljarn在评论中已经提到的那样,您缺少的是,如果您从基类中覆盖一个函数,那么您不可能将其标记为非虚拟:structbase{virtualvoidf();};structderived:base{voidf()final;//virtualasitoverridesbase::f};structmostderived:derived{//voidf();//e
在Java中,静态最终变量是常量,并且约定它们应该大写。但是,我看到大多数人以小写形式声明记录器,这在PMD中被视为违规。.例如:privatestaticfinalLoggerlogger=Logger.getLogger(MyClass.class);只需搜索google或SO对于“静态最终记录器”,您将自己看到。我们应该改用LOGGER吗? 最佳答案 记录器引用不是常量,而是最终引用,不应大写。常量VALUE应为大写。privatestaticfinalLoggerlogger=Logger.getLogger(MyClass
Java8最有用的特性之一是接口(interface)上的新default方法。引入它们的原因主要有两个(可能还有其他原因):提供实际的默认实现。示例:Iterator.remove()允许JDKAPI演进。示例:Iterable.forEach()从API设计者的角度来看,我希望能够在接口(interface)方法上使用其他修饰符,例如最终。这在添加便捷方法时很有用,可以防止在实现类中“意外”覆盖:interfaceSender{//Conveniencemethodtosendanemptymessagedefaultfinalvoidsend(){send(null);}//Im
在Java中,我们看到很多地方可以使用final关键字,但它的使用并不常见。例如:Stringstr="abc";System.out.println(str);在上述情况下,str可以是final,但这通常被忽略。当一个方法永远不会被覆盖时,我们可以使用final关键字。类似地,对于不会被继承的类。在任何或所有这些情况下使用final关键字真的可以提高性能吗?如果是这样,那怎么办?请解释。如果正确使用final确实对性能很重要,那么Java程序员应该养成哪些习惯来充分利用关键字? 最佳答案 通常不会。对于虚拟方法,HotSpot会
我不明白final关键字在用于方法参数时真正在哪里很方便。如果我们排除匿名类的使用、可读性和意图声明,那么对我来说几乎毫无值(value)。强制某些数据保持不变并不像看起来那么强大。如果参数是一个原始参数,那么它将不起作用,因为参数作为值传递给方法,并且更改它不会在范围之外产生任何影响。如果我们通过引用传递参数,那么引用本身就是一个局部变量,如果在方法内部更改了引用,则不会在方法范围之外产生任何影响。考虑下面的简单测试示例。尽管该方法更改了给它的引用的值,但该测试通过了,但没有任何效果。publicvoidtestNullify(){Collectionc=newArrayList()
在Java中,我们使用final关键字和变量来指定其值不会被更改。但是我看到您可以更改类的构造函数/方法中的值。同样,如果变量是static那么它就是一个编译错误。代码如下:importjava.util.ArrayList;importjava.util.List;classTest{privatefinalListfoo;publicTest(){foo=newArrayList();foo.add("foo");//Modification-1}publicstaticvoidmain(String[]args){Testt=newTest();t.foo.add("bar");
我想玩转YahooFantasySportsAPI。我不知道从哪里开始。我需要做什么才能开始在IRB中使用API并开始调用和检索不同的玩家或统计数据?这是我第一次尝试处理没有现成的Rubygem的API。雅虎梦幻体育API:http://developer.yahoo.com/fantasysports/guide/我已经按照开发指南中详述的步骤设置了我的开发人员消费者key和secretkey。不知道如何处理这些信息。我正在使用Rails3.2.2和Ruby1.9.2 最佳答案 在过去的几周里,我花了很多时间试图让一个网站与Yah