问题标签 [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.

0 投票
6 回答
9333 浏览

java - 序列化和不可变对象

我有一个用于不可变使用的类,因此我想标记所有字段final

然而,该类被序列化和反序列化以通过网络发送。为此,需要一个空的构造函数。这会阻止我创建最终字段。

我确定这是一个相当普遍的问题,但我找不到解决方案。我应该如何进行?

0 投票
3 回答
4132 浏览

java - 最终数组列表声明

当我声明最终的arraylist()时,我是否可以在该arraylist中执行插入、搜索和更新操作。

0 投票
5 回答
25906 浏览

java - 导入的 Java 类中的公共静态最终变量

我碰巧在我的工作场所遇到了 Java 代码。这是场景:有 2 个类 -ClassAClassB.

ClassA除了里面的 4 个公共静态最终字符串值外,什么都没有。它的目的是使用这些值ClassA.variable(不要问我为什么,这不是我的代码)。

ClassB进口ClassA。我编辑了字符串值ClassA并编译了它。当我运行时,ClassB我可以看到它使用的是旧值 - 而不是新值。我必须重新编译ClassB以使其使用来自ClassA! (我不得不重新编译其他导入的类ClassA!)

这仅仅是因为 JDK 1.6 还是我早该知道要重新编译ClassB!开导我。:)

0 投票
7 回答
2590 浏览

java - 最终方法是内联的?

Java final 方法会自动内联吗?

很多书说是,很多书说不是!!!

0 投票
5 回答
3514 浏览

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,实现一个简单的构造函数来初始化RGBValuesHSLValues成员。(是的,我知道基类 if-ily 包含派生类的静态实例)

0 投票
8 回答
54225 浏览

java - 最终静态方法的行为

我一直在用静态方法玩修饰符,遇到了一种奇怪的行为。

众所周知,静态方法不能被覆盖,因为它们与类而不是实例相关联。

所以如果我有下面的代码片段,它编译得很好

但是,如果我在 A 类的静态方法中包含 final 修饰符,则编译失败 B 中的 ts() 无法覆盖 A 中的 ts();被覆盖的方法是 static final

为什么在根本无法覆盖静态方法时会发生这种情况?

0 投票
7 回答
2501 浏览

java - 从Java中的构造函数声明和设置私有最终成员变量的正确方法?

有多种方法可以从构造函数中设置成员变量。我实际上是在讨论如何正确设置最终成员变量,特别是一个由助手类加载条目的映射。

在上面的示例中,帮助程序类如下所示:

我的想法是,使用方法在构造函数中设置这样的变量是更好的做法。所以 Base 类看起来像这样:

但是现在我无法维护 final 修饰符并出现编译器错误(无法设置最终变量)

另一种方法是:

但在这种情况下,Helper 类中的方法将更改为:

所以不同的是我在哪里创建一个新地图new HashMap<String, Command>();我的主要问题是,是否有推荐的方法来执行此操作,因为部分功能来自此 Helper 的静态方法,作为加载带有条目的实际地图的一种方式?

我是在 Base 类还是 Helper 类中创建新地图?在这两种情况下,Helper 将执行实际加载,并且 Base 对包含具体命令的地图的引用将是私有的和最终的。

除了我正在考虑的选项之外,是否还有其他更优雅的方法可以做到这一点?

0 投票
2 回答
1330 浏览

java - Java:为什么这种方法有副作用?

我有一种方法会产生副作用,即使某些变量被标记final。为什么是这样?也许我对做什么感到困惑final

0 投票
5 回答
8421 浏览

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 方法。有没有更简单的方法?

0 投票
4 回答
20778 浏览

java - 如何处理抛出检查异常的静态最终字段初始化程序

我正面临一个用例,我想声明一个static final带有初始化语句的字段,该语句被声明为抛出检查异常。通常,它看起来像这样:

我在这里遇到的问题是ObjectName构造函数可能会抛出各种已检查的异常,我并不关心(因为我知道我的名字是有效的,如果它不是这样的话,如果它悲惨地崩溃也没关系)。java编译器不会让我忽略这个(因为它是一个检查异常),我不想诉诸于:

因为静态块真的非常难以阅读。有没有人对如何以一种好的、干净的方式处理这个案子有什么建议?