我读了这个问题不可变对象,并留下了关于不可变对象,并最终场一个问题:
为什么我们需要不可变类中的实例变量为最终变量?
例如,考虑以下不可变的类:
public final class Immutable
{
private final int someVal;
public Immutable(int someVal)
{
this.someVal= someVal;
}
public int getVal() {
return val;
}
}
如果在上面的html" target="_blank">代码中没有set方法,而实例变量仅在构造函数中设置,为什么要求将实例变量声明为final?
有没有 要求
这样做的变量final
。但是,当您确实明确打算永远不更改变量时,通常这样做是一种好习惯final
,因为这不仅可以使变量避免错别字或其他错误,而且还可以声明它是不变的,例如。,其他程序员或您自己。
如果变量是public
,那么您将严格执行此操作final
以确保接口代码无法更改其值。
做笔记,你链接的问题没有直接关系,但是,由于它讨论 班
是final
,而不是变量。创建一个类final
意味着它不能被继承,而不是不可变的。当然,在制作不可变的对象时,一定要注意该问题的内容及其答案。但这是一个
单独的 问题。
我读到了这个关于不可变对象的问题,留下了一个关于不可变对象和final字段的问题: 为什么我们需要不可变类中的实例变量成为最终变量? 例如,考虑这个不可变类: 如果在上面的代码中没有设置方法,并且实例变量只在构造函数中设置,那么为什么需要将实例变量声明为final?
问题内容: 这个问题已经在这里有了答案 : 为什么在匿名类中只能访问最终变量? (15个答案) 为什么实例变量“忽略Lambda表达式中使用的变量必须是最终变量或实际上是最终变量”警告[重复] (2个答案) Lambdas:局部变量不需要最终变量,实例变量不需要 (10个答案) 2年前关闭。 当我编写此代码时,我收到一个编译时错误,该错误是: “ lambda中的变量必须是final或有效的fin
问题内容: 将实例变量作为最终变量有什么意义? 那么将该变量设置为静态最终变量会更好吗? 原因是如果任何对象都不能更改它,那么它与类(静态)变量相同,对吗? 问题答案: 不。 表示该类的所有实例都相同。 表示在初始分配后无法分配。因此,两个实例的非静态最终变量的值可能不同。 您可能有很多原因想使变量为final;最好的方法之一就是清晰度。如果我读了一个方法并且注意到foo是最终的,那么我不必担心它
问题内容: 例如,如果我有一个变量,并且在主线程中声明了一个runnable,并且想将x传递给该runnable的方法,则必须对其进行声明。为什么? 问题答案: 因为如果能够更改它们,可能会导致很多问题,请考虑以下事项: 这是一个粗略的示例,但您可以看到可能发生许多无法解释的错误。这就是变量必须为最终变量的原因。这是解决上述问题的简单方法: 如果您需要更完整的说明,则有点像同步。Java希望防止您
问题内容: 我的任务是制作一个带有实例变量的程序,该变量应该由用户输入。但是我什至不知道什么是实例变量。什么是实例变量?如何创建一个?它有什么作用? 问题答案: 实例变量是在类内部但在方法外部声明的变量: 现在可以在其他类中实例化此IronMan类以使用这些变量,例如: 这就是我们使用实例变量的方式。无耻插头:来自实例本免费的电子书拉到这里这里。
问题内容: 6年前关闭。 有关匿名类的文档说明 匿名类无法在其封闭范围内访问未声明为final或有效地为final的局部变量。 我不明白变数为“有效的最终”是什么意思。有人可以提供一个示例来帮助我理解这意味着什么吗? 问题答案: 有效地最终意味着它在获得初始值之后永远不会改变。 一个简单的例子: 在这里,并没有声明为final,但是由于它从未更改,因此实际上被认为是 final 。 从Java 8