问题标签 [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.
objective-c - 如何在 Objective-C 中将本地“变量”声明为 final?
在 Java 中,我可以将本地“变量”声明为 final,例如
当我尝试更改其值时,编译器会出错。我想将我的一些本地“变量”声明为 final 以避免意外更改它们的值。
这在Objective-C中可能吗?
java - 能否过度使用最终的伤害大于好处?
为什么人们如此强调将类中的每个变量都设为“最终”?我不相信将 final 添加到私有局部变量,或者真正将 final 用于常量以外的任何东西并将变量传递给匿名内部类有任何真正的好处。
我不打算开始任何形式的火焰战争,我只是真诚地想知道为什么这对某些人如此重要。我错过了什么吗?
java - 方法参数中的 final 关键字
我经常遇到如下所示的方法:
如果在没有传递最终参数的情况下调用此方法会发生什么。即稍后更改的Object1(因此未声明为final)可以很好地传递给此方法
java - Java中传递的最终变量是否会在另一侧保持最终状态?
我刚刚遇到了一些让我有些困惑的代码;我想澄清两个变化。
示例 1:
file
声明“ ”的目的是final
什么?由于 Java 原语是按值传递的,并且getAbsolutePath()
只是返回 a String
,因此变量不会final
在另一边(调用方法),对吗?而且由于file
变量只存在于这两行的范围内,我真的看不出final
关键字的任何用途。有什么我想念的吗?有人看到这样做的理由吗?
示例 2:
因为这里实际的对象被返回......这是否意味着file
变量将是常量/final
在另一边......?这似乎没有意义。
一般来说,在我看来,你传递了一个变量,没有它的访问类型。如在,我可以private
在一个函数中使用一个public
返回它的 get 函数的变量 - 但是通过调用函数接收它的变量必须指定一个访问修饰符。因此,如果它指定public
,则返回的变量将public
在该范围内。如果它指定private
,则返回的变量将private
在该范围内。有区别final
吗?变量的“恒定性”是可以传递的吗?考虑到我对 Java 的了解,这让我觉得不太可能。
还是我完全忽略了这一点,并且final
上面代码中的关键字还有其他用途?
编辑:
我与编写代码的原始开发人员进行了核对,他说他只输入final
关键字是因为他最初认为该方法会更长,并希望确保文件始终保持不变。他还说,他通常将不应更改的变量声明为final
,作为全面的规则和原则上的排序 - 以下两个答案都提到了这一点。因此,出于标准原因,我似乎对一个简单的额外关键字阅读过多。谢谢大家!
php - 如果一个 php 类被定义为 final,那么将它的方法也定义为 final 是否有意义?
我有一个定义为final的类。将方法也定义为 final 是否有意义?我知道,由于类本身是 final 的,它不能被扩展,这会使方法 final 声明变得多余,但我想处理类和其他类的文档,并认为这会有所帮助,因为 final 属性该方法将在那里,因此您会立即知道。
我在 PEAR 的编码标准中找不到任何关于此的内容。
java - 重用具有最终实例字段的构造函数
假设我有以下试图不可变的类
而且,为了这个问题,让我们假设我不想为这个类使用构建器(这将解决问题)。
所以问题是:
有没有办法在不删除 epsilon 的 final 修饰符并保留两个构造函数的情况下实现这种行为?
也就是说,没有做类似的事情
并且不使用构建器
javascript - 有什么方法可以防止替换 JavaScript 对象属性?
我想让一个对象的结构不可变,防止其属性随后被替换。但是,这些属性需要是可读的。这可能吗?
我确信没有语言特性(final
在 Java 和readonly
C# 中)支持这一点,但想知道是否可能有另一种机制来实现相同的结果?
我正在寻找这些方面的东西:
java - Java中的最终静态变量是线程安全的吗?
我已经阅读了很多,但还没有找到明确的答案。
我有一个看起来像这样的类:
而且我想知道从 Foo 的实例访问 sharedData 是否是线程安全的(如构造函数和 doSomethingUseful() 中所示)。Foo 的许多实例将在多线程环境中创建。
我的意图是 sharedData 在静态初始化程序中初始化,之后不再修改(只读)。
我读到的是不可变对象本质上是线程安全的。但我只在似乎是实例变量的上下文中看到了这一点。不可变的静态变量是线程安全的吗?
我发现的另一个构造是 ConcurrentHashMap。我可以制作 ConcurrentHashMap 类型的 sharedData,但它包含的 HashMaps 也必须是 ConcurrentHashMap 类型吗?基本上..
或者
还是会更安全(但简单地克隆()成本更高)?
TIA。
(静态初始化器已被编辑以提供更多上下文。)
java - 我应该如何声明一个对类的每个实例可见的常量集?
我想在我的类中设置一个常量,该常量对类的所有实例都是可见的。
首先,我不知道是否需要将其声明为“静态”。据我了解,静态字段的任何更改(由其中一个实例完成)都会被其他实例看到(因此静态变量不绑定到特定实例)。此外,可以在不使用任何实例的情况下更改静态字段(我们直接使用类)。因此,静态字段的所有这些特殊属性都与如何更改它的方式以及这些更改的效果有关。但在我的情况下,我希望有一个常数(所以“变化”问题在这里不相关)。所以,可能我不需要使用“静态”。正确的?
其次,我的集合将包含很多元素,我不想一次定义集合的值(当我创建变量时)。换句话说,我想声明一个集合,然后逐步将元素添加到这个集合中。但如果我使用常量,我就无法做到。是否可以指定集合的值然后使其保持不变?
第三,我意识到如果我尝试在任何方法之外更改变量的值,可能会出现一些问题。那么它是怎样工作的?
添加:
好的。感谢答案,我明白它应该是“最终的”和“静态的”(因为它是一个常量集并且它不会与任何特定实例相关联,它应该对类的所有实例都是可见的)。但是我仍然有问题。我想使用“add”指定集合,如果它是常量(最终),我不能添加到集合中。此外,我无法更改方法之外的变量值(为什么?)。无论如何,我不坚持使用“添加”来定义集合。我准备立即定义它。但我不知道该怎么做。我试过这样的事情:
他们没有工作。
添加2:
谁能解释一下 Tadeusz Kopec 给出的代码?
1. 该fillSet
方法有一个名为“set”的变量。为什么在方法中不使用它?
2. 里面有
什么?这个方法有什么作用?
3.做什么?在后面的例子中,我们给这个方法一个空集。做什么的?
4. 我们为什么要声明为 final?
5.具体是做什么的?我认为根据名称它会生成一个无法修改的集合。但是为什么声明为不够呢?比它也将是恒定的。SomeType()
fillSet
fillSet
tempSet
unmodifiableSet
yourSetField
final