草庐IT

java - "final"在运行时是最终的吗?

我一直在玩ASM,并且我相信我成功地将final修饰符添加到类的实例字段中;但是,然后我继续实例化所述类并在其上调用setter,这成功地更改了now-final字段的值。我的字节码更改是否有问题,还是最终仅由Java编译器强制执行?更新:(7月31日)这里有一些代码供您引用。主要部分是一个带有privateintx和privatefinalinty的简单POJO,MakeFieldsFinalClassAdapter,它使得它访问的每个字段都是最终的,除非它已经是最终的,和AddSetYMethodVisitor,它会导致POJO的setX()方法也将y设置为与设置x相同的值。换句话

java - 了解此警告 : The serializable class does not declare a static final serialVersionUID

我有一些静态初始化代码:someMethodThatTakesAHashMap(newHashMap(){{put("a","value-a");put("c","value-c");}});由于某种原因,我收到了来自Eclipse的警告:可序列化类未声明静态最终serialVersionUID。这是在提示匿名类吗?我能做些什么呢,或者我应该压制它。 最佳答案 您使用的语法称为double-braceinitialization-这实际上是一个“instanceinitializationblock是anonymousinnercl

java - 了解此警告 : The serializable class does not declare a static final serialVersionUID

我有一些静态初始化代码:someMethodThatTakesAHashMap(newHashMap(){{put("a","value-a");put("c","value-c");}});由于某种原因,我收到了来自Eclipse的警告:可序列化类未声明静态最终serialVersionUID。这是在提示匿名类吗?我能做些什么呢,或者我应该压制它。 最佳答案 您使用的语法称为double-braceinitialization-这实际上是一个“instanceinitializationblock是anonymousinnercl

java - 等价于 Java 中的 const(C++)

我想知道在Java中是否有与c++的const等价的东西。我理解final关键字,但不幸的是我不能用它来声明函数返回值final。相反,它始终确保函数不能被覆盖,对吗?基本上,我想确保给定的返回类不能被修改并且是只读的。这在Java中可能吗? 最佳答案 Basically,Iwanttomakesureagivenreturnedclasscannotbemodifiedandisreadonly.IsthatpossibleinJava?不是直接的,但一种解决方法是immutableobject.例子-publicfinalFoo

java - 等价于 Java 中的 const(C++)

我想知道在Java中是否有与c++的const等价的东西。我理解final关键字,但不幸的是我不能用它来声明函数返回值final。相反,它始终确保函数不能被覆盖,对吗?基本上,我想确保给定的返回类不能被修改并且是只读的。这在Java中可能吗? 最佳答案 Basically,Iwanttomakesureagivenreturnedclasscannotbemodifiedandisreadonly.IsthatpossibleinJava?不是直接的,但一种解决方法是immutableobject.例子-publicfinalFoo

java - 最佳实践 : Java static non final variables

在Java中,什么时候应该使用静态非final变量?例如privatestaticintMY_VAR=0;显然我们在这里不是在谈论常量。publicstaticfinalintMY_CONSTANT=1;根据我的经验,我经常在使用单例时证明它们是合理的,但最终我需要拥有多个实例,这给自己带来了极大的头痛和重构。在实践中似乎很少使用它们。你怎么看? 最佳答案 统计收集可能使用非最终变量,例如计算创建的实例数。另一方面,对于那种情况,您可能无论如何都想使用AtomicLong等,此时它可能是最终的。或者,如果您要收集多个统计信息,您最终

java - 最佳实践 : Java static non final variables

在Java中,什么时候应该使用静态非final变量?例如privatestaticintMY_VAR=0;显然我们在这里不是在谈论常量。publicstaticfinalintMY_CONSTANT=1;根据我的经验,我经常在使用单例时证明它们是合理的,但最终我需要拥有多个实例,这给自己带来了极大的头痛和重构。在实践中似乎很少使用它们。你怎么看? 最佳答案 统计收集可能使用非最终变量,例如计算创建的实例数。另一方面,对于那种情况,您可能无论如何都想使用AtomicLong等,此时它可能是最终的。或者,如果您要收集多个统计信息,您最终

java - 开闭原理及Java "final"修饰符

开闭原则指出“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。然而,JoshuaBloch在他的名著《EffectiveJava》中给出了以下建议:“设计和记录继承,否则禁止它”,并鼓励程序员使用“final”修饰符来禁止子类化。我认为这两个原则显然相互矛盾(我错了吗?)。您在编写代码时遵循哪个原则,为什么?你是让你的类保持打开状态,不允许继承其中一些(哪些?),还是尽可能使用final修饰符? 最佳答案 坦率地说,我认为开放/封闭原则与其说是不合时宜的,不如说是不合时宜的。这似乎是从80年代和90年代开始的,当时OO框架

java - 开闭原理及Java "final"修饰符

开闭原则指出“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。然而,JoshuaBloch在他的名著《EffectiveJava》中给出了以下建议:“设计和记录继承,否则禁止它”,并鼓励程序员使用“final”修饰符来禁止子类化。我认为这两个原则显然相互矛盾(我错了吗?)。您在编写代码时遵循哪个原则,为什么?你是让你的类保持打开状态,不允许继承其中一些(哪些?),还是尽可能使用final修饰符? 最佳答案 坦率地说,我认为开放/封闭原则与其说是不合时宜的,不如说是不合时宜的。这似乎是从80年代和90年代开始的,当时OO框架

java - 为什么我们在匿名内部类中使用 final 关键字?

我目前正在准备S(O)CJP,以及Sierra和Bates书。关于内部类(方法本地或匿名),他们说我们无法访问局部变量,因为它们存在于堆栈上,而类存在于堆上并且可以由方法返回然后尝试访问到堆栈上的这些变量,但由于方法结束后不再存在......众所周知,我们可以通过使用final关键字绕过这一点。这是他们在书中所说的,但他们并没有真正解释final关键字的作用是什么......据我所知,在方法局部变量上使用final关键字并不能让它存在于堆中......那么该类如何能够访问仍然存在于堆栈中的final变量,而可能没有更多的堆栈???我想内部类中应该有这个最终局部变量的某种“副本”。既然值