草庐IT

kotlin - 添加抽象私有(private) getter 和公共(public) setter 的正确方法是什么?

我有一个接口(interface),我想要一个可以在类内部修改但不能在外部修改的属性。我不能使用val因为它需要是可变的,并且var关键字不能具有指定的私有(private)setter,因为它在接口(interface)中。在Java中我会这样做:publicgetMyProperty();我可以在kotlin中使用相同的方法,直接编写getter函数,但这似乎不像kotlin的方法。有没有更好的方法来达到同样的效果?fungetMyProperty() 最佳答案 在Kotlin中,你实际上可以用varoverrideval,所以

Kotlin val 差异 getter 覆盖与分配

我开始玩Kotlin并阅读了一些关于使用自定义getter的mutableval的内容。如here中所述或在KotlinCodingConvention如果结果可以更改,则不应覆盖getter。classSampleArray(valsize:Int){valisEmptyget()=size==0//sizeissetatthebeginninganddoesnotchangesothisisok}classSampleArray(varsize:Int){funisEmpty(){returnsize==0}//sizeissetatthebeginningbutcanalsoch

Kotlin - 了解 Getter 和 Setter

Kotlin自动生成它的getter和设置,但我从不引用它们?另外,在Kotlin中编写自定义getter/setter的正确方法是什么?当我说myObj.myVar=99时,我觉得myVar是我直接访问的myObj的公共(public)字段?这里到底发生了什么? 最佳答案 这已经在几个地方得到了回答,但我想我会为从Java/C#/C/C++过渡到Kotlin的人分享一个具体的例子,并且他们有同样的问题:我很难理解getter和setter在Kotlin中是如何工作的,尤其是因为它们从未被明确地调用过(就像在Java中一样)。因此,

kotlin - Interface 的函数与 Property 的 getter 冲突

接口(interface)的函数名故意与属性的getter名冲突,但由于意外覆盖问题被编译器禁止。是否可以指示编译器这是故意的?interfaceA{fungetFoo()}classB:A{valfoo} 最佳答案 此功能似乎没有以任何方式实现。@AndreyBreslav对similarquestion的评论:YoucannotoverrideJavamethodswithKotlinpropertiesatthemoment.Itwouldbeniceifwecouldsupportit,butwedon'tknowhowto

java - Kotlin 属性的私有(private) getter 和 public setter

如何在Kotlin中创建一个具有私有(private)getter(或没有它)但具有公共(public)setter的属性?varstatusprivateget不起作用并出现错误:Getter可见性必须与属性可见性相同就我而言,原因是Java互操作:我希望我的Java代码能够调用setStatus但不能调用getStatus。 最佳答案 目前在Kotlin中不可能有一个带有比该属性更可见的setter的属性。问题跟踪器中有一个语言设计问题,请随时观看/投票或分享您的用例:https://youtrack.jetbrains.com

kotlin - 覆盖 Kotlin 数据类的 getter

给定以下Kotlin类:dataclassTest(valvalue:Int)如何覆盖Intgetter以便在值为负时返回0?如果这不可能,有哪些技术可以达到合适的结果? 最佳答案 在每天花费将近一整年的时间编写Kotlin之后,我发现尝试像这样覆盖数据类是一种不好的做法。有3种有效的方法,在我介绍它们之后,我将解释为什么其他答案建议的方法不好。让创建dataclass的业务逻辑将值更改为0或更大,然后再使用错误值调用构造函数。这可能是大多数情况下的最佳方法。不要使用数据类。使用常规的class并让你的IDE为你生成equals和h

node.js - 用于规范化数据的 Mongoose getter/setter

我有User架构,其中有一个username字段。我希望这个字段区分大小写,以便用户可以注册诸如BobDylan之类的名称。但是,我需要我的架构来验证新条目以检查是否有重复的、区分大小写的,例如bobdylan。我的研究告诉我,我应该在架构中创建一个额外的字段来存储小写/大写版本,以便我可以轻松检查它是否是唯一的。我的问题是,我将如何使用MongooseAPI实现这一目标?我尝试过使用set函数,比如:UserSchema.path('username_lower_case').set(function(username_lower_case){returnthis.username.

c++ - getter 和 setter 风格

(抛开你是否应该拥有它们的问题。)我一直倾向于只使用函数重载来为getter和setter提供相同的名称。intrate(){return_rate;}voidrate(intvalue){_rate=value;}//insteadofintgetRate(){return_rate;}voidsetRate(intvalue){_rate=value;}//mainlybecauseitallowsmetowritethemuchcleanertotal(period()*rate());//insteadofsetTotal(getPeriod()*getRate());当然我是

c++ - 使用 QTCreator 自动生成 setter / getter ?

尽管进行了一些搜索,但我还是找不到使用QTCreator2.3.1为C++类自动生成getter和setter的方法。你们知道有什么方法吗? 最佳答案 右键点击你的成员然后Refactor然后GenerateGetterandSettermemberfunction你就完成了:)在QtCreator3.2.x上,创建成员,然后单击它并按alt+Enter: 关于c++-使用QTCreator自动生成setter/getter?,我们在StackOverflow上找到一个类似的问题:

c++ - 使用 getter/setter vs "tell, don' t 问“?

告诉,不问原则here当我使用getter或setter时,通常会粘贴到我身上,人们告诉我不要使用它们。该网站清楚地解释了我应该做什么和不应该做什么,但它并没有真正解释为什么我应该告诉而不是询问。我发现使用getter和setter效率更高,而且我可以用它们做更多事情。想象一个具有health和armor属性的类Warrior:classWarrior{unsignedintm_health;unsignedintm_armor;};现在有人用特殊攻击攻击我的战士,降低他的护甲5秒。使用setter会是这样的:voidAttacker::attack(Warrior*target){t