问题标签 [final]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 序列化和不可变对象
我有一个用于不可变使用的类,因此我想标记所有字段final
。
然而,该类被序列化和反序列化以通过网络发送。为此,需要一个空的构造函数。这会阻止我创建最终字段。
我确定这是一个相当普遍的问题,但我找不到解决方案。我应该如何进行?
java - 最终数组列表声明
当我声明最终的arraylist()时,我是否可以在该arraylist中执行插入、搜索和更新操作。
java - 导入的 Java 类中的公共静态最终变量
我碰巧在我的工作场所遇到了 Java 代码。这是场景:有 2 个类 -ClassA
和ClassB
.
ClassA
除了里面的 4 个公共静态最终字符串值外,什么都没有。它的目的是使用这些值ClassA.variable
(不要问我为什么,这不是我的代码)。
ClassB
进口ClassA
。我编辑了字符串值ClassA
并编译了它。当我运行时,ClassB
我可以看到它使用的是旧值 - 而不是新值。我必须重新编译ClassB
以使其使用来自ClassA
! (我不得不重新编译其他导入的类ClassA
!)
这仅仅是因为 JDK 1.6 还是我早该知道要重新编译ClassB
!开导我。:)
java - 最终方法是内联的?
Java final 方法会自动内联吗?
很多书说是,很多书说不是!!!
java - 如何在 Java 的派生类的构造函数中分配基类的最终变量?
我有一个Color
看起来像这样的基类。该类被设计为不可变的,因此具有final
修饰符而没有设置器:
派生自这个类的是一个ColorHSL
类,除了提供Color
类的 getter 之外,它还具有色调、饱和度和亮度。这是事情停止工作的地方。
的构造函数ColorHSL
需要做一些计算,然后设置_r
、_b
和的值_g
。但是必须在进行任何计算之前调用超级构造函数。因此引入了无参数构造函数,允许稍后设置Color()
final _r
、_b
和。但是, Java 编译器不接受_g
无参数构造函数或设置(第一次,在 的构造函数中)。ColorHSL
有没有办法解决这个问题,还是我必须从、和中删除final
修饰符?_r
_b
_g
编辑:
Color
最后,我选择了一个包含 RGB 和 HSL 数据的基本抽象类。基类:
RGBColor
然后HSLColor
派生自的类Color
,实现一个简单的构造函数来初始化RGBValues
和HSLValues
成员。(是的,我知道基类 if-ily 包含派生类的静态实例)
java - 最终静态方法的行为
我一直在用静态方法玩修饰符,遇到了一种奇怪的行为。
众所周知,静态方法不能被覆盖,因为它们与类而不是实例相关联。
所以如果我有下面的代码片段,它编译得很好
但是,如果我在 A 类的静态方法中包含 final 修饰符,则编译失败 B 中的 ts() 无法覆盖 A 中的 ts();被覆盖的方法是 static final。
为什么在根本无法覆盖静态方法时会发生这种情况?
java - 从Java中的构造函数声明和设置私有最终成员变量的正确方法?
有多种方法可以从构造函数中设置成员变量。我实际上是在讨论如何正确设置最终成员变量,特别是一个由助手类加载条目的映射。
在上面的示例中,帮助程序类如下所示:
我的想法是,使用方法在构造函数中设置这样的变量是更好的做法。所以 Base 类看起来像这样:
但是现在我无法维护 final 修饰符并出现编译器错误(无法设置最终变量)
另一种方法是:
但在这种情况下,Helper 类中的方法将更改为:
所以不同的是我在哪里创建一个新地图new HashMap<String, Command>();
?我的主要问题是,是否有推荐的方法来执行此操作,因为部分功能来自此 Helper 的静态方法,作为加载带有条目的实际地图的一种方式?
我是在 Base 类还是 Helper 类中创建新地图?在这两种情况下,Helper 将执行实际加载,并且 Base 对包含具体命令的地图的引用将是私有的和最终的。
除了我正在考虑的选项之外,是否还有其他更优雅的方法可以做到这一点?
java - Java:为什么这种方法有副作用?
我有一种方法会产生副作用,即使某些变量被标记final
。为什么是这样?也许我对做什么感到困惑final
。
java - 子类化最终类;或者,退化的装饰器
我对同一种对象有许多不同的表示;让我们称之为事物。“事物”是一个标记界面。ThingFormat0、ThingFormat1、ThingFormat2等都是实现Thing的JavaBean。(因为它们是 JavaBean,所以 JSON 编组器会自动将它们与 JSON 进行自动转换。) ThingFormat1 只有几个成员,例如 name 和 id。ThingFormat2 具有指向其他事物的 URI 链接。在 ThingFormat3 中有 ThingFormat1 表示其他事物等。
JSON 序列化程序知道如何自动转换 URI。(它适用于任何可以使用 toString() 和构造函数 ClassName(String string) 进行转换的类。)
我想要一个行为类似于 URI 但实现标记接口 Thing 的 ThingFormat0。
这不起作用,因为 URI 是最终类并且不能被子类化。
我能想到的唯一方法是制作一个装饰器(一种非常退化的装饰器,因为它不会向 URI 添加任何功能)。这在一些“鸭子类型”语言中很容易,但在 Java 中更痛苦,因为我必须包装一个 URI 并实现我需要的所有 URI 方法。有没有更简单的方法?
java - 如何处理抛出检查异常的静态最终字段初始化程序
我正面临一个用例,我想声明一个static final
带有初始化语句的字段,该语句被声明为抛出检查异常。通常,它看起来像这样:
我在这里遇到的问题是ObjectName
构造函数可能会抛出各种已检查的异常,我并不关心(因为我知道我的名字是有效的,如果它不是这样的话,如果它悲惨地崩溃也没关系)。java编译器不会让我忽略这个(因为它是一个检查异常),我不想诉诸于:
因为静态块真的非常难以阅读。有没有人对如何以一种好的、干净的方式处理这个案子有什么建议?