我想我已经读过字段上的final关键字保证如果线程1实例化包含该字段的对象,那么如果线程2具有对该对象的引用,那么线程2将始终看到该字段的初始化值(前提是其构造正确)。它还在JLS中说[Thread2]willalsoseeversionsofanyobjectorarrayreferencedbythosefinalfieldsthatareatleastasup-to-dateasthefinalfieldsare.(section17.5ofJLS)这意味着如果我有A类classA{privatefinalBb=newB();privateintaNotFinal=2;...和B
我有一个最终的非静态成员:privatefinalHashMapmyMap;我想使用构造函数调用的方法对其进行初始化。由于myMap是最终的,我的“帮助”方法无法直接初始化它。当然我有选择:我可以直接在构造函数中实现myMap初始化代码。MyConstructor(StringsomeThingNecessary){myMap=newHashMap();myMap.put("blah","blahblah");//etc...//otherinitializationstuffunrelatedtomyMap}我可以让我的辅助方法构建HashMap,将其返回给构造函数,然后让构造函数将
我有一个最终的非静态成员:privatefinalHashMapmyMap;我想使用构造函数调用的方法对其进行初始化。由于myMap是最终的,我的“帮助”方法无法直接初始化它。当然我有选择:我可以直接在构造函数中实现myMap初始化代码。MyConstructor(StringsomeThingNecessary){myMap=newHashMap();myMap.put("blah","blahblah");//etc...//otherinitializationstuffunrelatedtomyMap}我可以让我的辅助方法构建HashMap,将其返回给构造函数,然后让构造函数将
引自http://sites.google.com/site/gson/gson-design-document:WhyaremostclassesinGsonmarkedasfinal?WhileGsonprovidesafairlyextensiblearchitecturebyprovidingpluggableserializersanddeserializers,Gsonclasseswerenotspecificallydesignedtobeextensible.Providingnon-finalclasseswouldhaveallowedausertolegitim
引自http://sites.google.com/site/gson/gson-design-document:WhyaremostclassesinGsonmarkedasfinal?WhileGsonprovidesafairlyextensiblearchitecturebyprovidingpluggableserializersanddeserializers,Gsonclasseswerenotspecificallydesignedtobeextensible.Providingnon-finalclasseswouldhaveallowedausertolegitim
这段代码:interfaceConfig{intMAX_CONN=20;}按我的预期编译和工作。看起来和下面的一样:interfaceConfig{publicstaticfinalintMAX_CONN=20;}对于Java接口(interface)中的常量,“publicstaticfinal”是多余的吗?Java1.1、1.2、1.3、1.4、...、1.8是这样吗?还是在Java版本中发生了变化? 最佳答案 在接口(interface)中声明的变量是隐式的publicstaticfinal。这就是JLS9.3说:Everyf
这段代码:interfaceConfig{intMAX_CONN=20;}按我的预期编译和工作。看起来和下面的一样:interfaceConfig{publicstaticfinalintMAX_CONN=20;}对于Java接口(interface)中的常量,“publicstaticfinal”是多余的吗?Java1.1、1.2、1.3、1.4、...、1.8是这样吗?还是在Java版本中发生了变化? 最佳答案 在接口(interface)中声明的变量是隐式的publicstaticfinal。这就是JLS9.3说:Everyf
把private和final加到同一个方法里是不是多余?classSomeClass{//--snip--privatefinalvoiddoStuff(){//privateworkhere}}如果它是private,那么任何人都无法覆盖它,对吧?final关键字没有效果,为什么还要加?(或者我错过了什么?) 最佳答案 基本上,这是允许的,因为他们觉得设置一个特殊情况来禁止private修饰符是不值得的。就像您可以将接口(interface)上的方法声明为public,或者将接口(interface)中的嵌套类声明为static,
把private和final加到同一个方法里是不是多余?classSomeClass{//--snip--privatefinalvoiddoStuff(){//privateworkhere}}如果它是private,那么任何人都无法覆盖它,对吧?final关键字没有效果,为什么还要加?(或者我错过了什么?) 最佳答案 基本上,这是允许的,因为他们觉得设置一个特殊情况来禁止private修饰符是不值得的。就像您可以将接口(interface)上的方法声明为public,或者将接口(interface)中的嵌套类声明为static,
非常基本的问题,但是,如果将“final”放在下面的变量之前会做什么......finalEditTextmyTextField=(EditText)findViewById(R.id.myTextField);final是做什么的? 最佳答案 简答停止将“myTextField”变量分配给其他对象。长答案不会阻止“myTextField”变量发生突变,例如将其字段设置为新值。使代码更具可读性(恕我直言),因为读者永远不必怀疑“myTextField”变量是否会在稍后在代码中重新分配。防止意外重新分配变量的错误类别(与使实例不可变的