我对Kotlin很陌生,并试图将一个项目从Java迁移到它。我对Kotlin的属性和它们的getters/setter以及可见性范围有点困惑。
我想要实现的是:
public class Foo {
private int number;
public int getNumber() {
return number;
}
public void increment() {
number++;
}
}
所以基本上我需要创建一个具有私有属性号
的类。此属性应由公共 getter 访问,但它不应具有 setter。此外,此属性应该是内部可变的,以便可以使用某种方法(如 increment())
更改其值。
据我所知,我不能将其声明为val
,因为在这种情况下,它将是完全不可变的,即使在类的实例中也是如此,所以我不能将其递增。看起来它应该是var
。但是我没有看到将属性本身设为私有
并且该属性的getter设为public
的选项,因为似乎属性及其getter/setter应该具有相同的可见性范围......
在 Kotlin 中,您的类将如下所示:
class Foo {
var number = 0
get
private set
fun increment() {
number++
}
}
Getter是公共的(但无论如何,它是像这样隐式创建的,所以实际上我们可以删除它),而setter是私有的。
我也是科特林的新手,似乎是这样做的:
class Foo {
var number: Int = 0; private set
fun increment() {
++number;
}
}
如其文件中所述
如果您使用Intellij,您只需将代码粘贴到静态编程语言类中,就会收到以下内容:
class Foo {
var number: Int = 0
private set
fun increment() {
number++
}
}
这基本上也是你问题的答案...
私有集
告诉 setter 仅在私有下可见。因此,您可以在Foo
中访问它,但不能从外部访问它。显式设置的 0
(与 Java 相反)。然后:默认情况下,属性和函数是公共的
。
还要检查关于属性的Kotlin参考(特别是getter/setter)
如何在Kotlin中创建一个具有私有getter(或只是没有)但具有公共setter的属性? 不能使用错误: 在我的例子中,原因是Java Interop:我希望我的Java代码能够调用,但不能调用。
如何使用自定义setter声明属性,但在Kotlin中没有getter?例如,在安科,他们这样做: 但在我看来,这有点骇人。这样做对吗?如果是,那么当一个项目没有Anko依赖关系时,情况会怎样呢? 附言:让我说清楚——我想没有吸气剂,而不是私人吸气剂
我希望我的类有一个字段,该字段返回所有公共访问的不可变列表,但在对象实例中,我希望列表是可变的,以便我可以向其添加元素。 我试过了,但不确定这是否被视为良好做法?
我在kotlin中初始化了一些私有Int变量。 我的问题是,当我旋转手机时,会创建一个新的is活动,在当前代码中,分数被分配为0。是否有任何方法可以只初始化一次?出路是什么? 我在使用分数创建内部有一些计算。由于 onRestoreInstanceState 是在 onCreate 之后执行的,除了在 onStart 中定义分数之外,有没有办法保持分数值在屏幕旋转时不受影响?
问题内容: 长话短说:我需要使用PHP风格的getter,但要使用JavaScript。 我的JavaScript仅在Firefox中运行,因此我可以使用Mozilla特定的JS。 我能找到的制作JS吸气剂的唯一方法是指定其名称,但我想为所有可能的名称定义一个吸气剂。我不确定这是否可行,但我非常想知道。 问题答案: 可以做到!我很高兴这个存在!这里给出一个答案:是否有与python的__getat
因此,我试图用Kotlin开发一个Android应用程序,作为纸笔RPG伴侣。现在我想创造一个暴民阶层 在另一个活动中,我想显示以下信息: Android studio不断告诉我不能访问“名称”:尽管它在“Mob”中是私有的。我以为这就是我得到< code>get()的原因? 也许有更多静态编程语言经验的人可以帮忙。提前谢谢你。