我目前正在阅读JoshuaBloch的《EffectiveJava》,第17条是“为继承设计和记录,否则禁止继承”。作者建议默认禁止继承。在默认情况下将类声明为final是否安全,如果需要扩展类,在以后的版本中删除final关键字是否安全?它会破坏对使用先前版本编译的代码的向后兼容性吗?如果是这样,似乎更安全的做法是将所有类设为最终类,并且仅在有良好支持需求的情况下在未来的版本中将其删除。 最佳答案 它既不破坏二进制也不破坏源兼容性。这就是将类(class)设置为final是个好主意的原因之一;改变主意总是可以的。TheJavaLa
我正在尝试将final关键字添加到IntelliJIDEA14中自动生成的setter中的参数。我知道我可以创建用于setter方法的当前模板的副本:#set($paramName=$helper.getParamName($field,$project))public###if($field.modifierStatic)static###endvoidset$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field,$pr
如果我查看OpenJDK、Hibernate或Apache中的java源代码,我还没有看到任何局部变量声明为final。这表明一些最广泛使用的Java软件库的开发人员:不要相信final关键字会提高可读性。不相信它会显着提高性能。为什么stackoverflow上的大多数贡献者都认为应该使用它(基于投票最高的回复)? 最佳答案 可能是因为输入单词final中的五个LONG字母很麻烦...为什么他们要经历写作的痛苦finalintx;打字次数是原来的两倍intx;?我们开发人员很懒,你知道的...:P
publicclassMain{staticfinalintalex=getc();staticfinalintalex1=Integer.parseInt("10");staticfinalintalex2=getc();publicstaticintgetc(){returnalex1;}publicstaticvoidmain(String[]args){finalMainm=newMain();System.out.println(alex+""+alex1+""+alex2);}}有人能告诉我为什么打印:01010吗?我知道它是一个静态最终变量,它的值不应该改变,但有点难以理
我有一个显示各种按钮的菜单,我可以让这些按钮在单击时调用它们各自的JPanel。问题是我想让Jpanel在调用时滑入而不是瞬间弹出。我尝试使用补间引擎,作为Java初学者,我发现它真的让人不知所措,所以我决定使用定时动画。我能够使顶部的Jpanel滑动到一侧,但由于某种原因下一个面板不想显示,我真的很累,有人可以帮忙吗!代码如下:publicclassListenerimplementsActionListener{@OverridepublicvoidactionPerformed(ActionEvente){newTimer(0,newActionListener(){public
第二行的意义:publicfinalclassA{}finalAobj1=newA();如果A已经是不可变的,为什么人们可能想要使obj1成为最终的?(只是为了让它坚持一个独特的内存引用?)。 最佳答案 第一行中的final表示该对象因扩展而关闭......即你不能继承它。第二行的final表示您不能重新分配变量。 关于java-为什么将对最终类实例的引用声明为最终的?,我们在StackOverflow上找到一个类似的问题: https://stackover
我对Java中使用EqualsVerifier的equals和hashCode契约有一些疑问图书馆。假设我们有这样的东西publicabstractclassPerson{protectedStringname;@Overridepublicbooleanequals(Objectobj){//onlynameistakenintoaccount}@OverridepublicinthashCode(){//onlynameistakenintoaccount}}以及以下扩展类:publicfinalclassWorkerextendsPerson{privateStringworkD
我最近与friend讨论枚举与公共(public)静态最终常量。我告诉他publicstaticfinalconstants比枚举更易于维护,有时速度更快(android开发人员文档证实了这一点),也更方便。我还说过,使用枚举也会失去功能:您不能扩展枚举。您不能实例化枚举。然后他说,如果您需要实例化或扩展枚举,则不应使用枚举。然后我回答说,这就是为什么我们应该只使用常量,因为它更易于维护;如果在项目中期我们需要实例化一个枚举或扩展它怎么办?然后我们将不得不改变一切。为了说明我的观点而制作的枚举与常量示例:publicenumWeekDay{/**Wewillstartat1fordem
顺序有没有区别:publicstaticfinalString="something";或publicfinalstaticString="something";? 最佳答案 不,虽然JavaLanguageSpecification建议您使用第一个排序:FieldModifiers:FieldModifierFieldModifiersFieldModifierFieldModifier:oneofAnnotationpublicprotectedprivatestaticfinaltransientvolatile...Iftw
以下代码抛出一个NullPointerException。importjava.io.*;publicclassNullFinalTest{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{Foofoo=newFoo();foo.useLock();ByteArrayOutputStreambuffer=newByteArrayOutputStream();newObjectOutputStream(buffer).writeObject(foo);foo=(Foo)newObjectI