如何在Kotlin中使用自定义setter但没有getter来声明属性?在Anko例如他们这样做:varmyProperty:Type@Deprecated(AnkoInternals.NO_GETTER,level=DeprecationLevel.ERROR)get()=AnkoInternals.noGetter()set(value){field=value;/*setterlogic*/}但对我来说它看起来有点hacky。这是正确的方法吗?如果是,那么项目没有Anko依赖的情况呢?附:让我说清楚-我想要根本没有setter/getter,而不是私有(private)sette
我正在Android上测试kotlin,遇到了一个问题,即两个变量的setter在无限递归中被调用,因为它们在最初设置时试图相互更改。这是一个示例代码classExample{vara:Int=0set(value){b=a+10}varb:Int=0set(value){a=b-10}}然后说我使用以下代码:valexample=Example()example.a=10它最终导致无限递归并最终导致堆栈溢出。b的二传手调用a的setter进而调用b的setter再次。它会永远持续下去。我希望能够更新b的值每当a已设置,但也会更新a的值每当b已设置。Kotlin专家有什么想法吗?在这种
我正在Android上测试kotlin,遇到了一个问题,即两个变量的setter在无限递归中被调用,因为它们在最初设置时试图相互更改。这是一个示例代码classExample{vara:Int=0set(value){b=a+10}varb:Int=0set(value){a=b-10}}然后说我使用以下代码:valexample=Example()example.a=10它最终导致无限递归并最终导致堆栈溢出。b的二传手调用a的setter进而调用b的setter再次。它会永远持续下去。我希望能够更新b的值每当a已设置,但也会更新a的值每当b已设置。Kotlin专家有什么想法吗?在这种
假设我有两个类,一个Base和一个扩展Base的Impl。packagemypackageopenclassBaseclassImpl:Base()我将如何为具体的Impl-Type(供内部使用)创建一个私有(private)属性,并将publicgetter键入为Base-Type,实现多态?我最初的做法是这样的:classTest{privatevalmyType=Impl()get():Base}但是,Kotlin编译器提示:Error:(30,11)Kotlin:Getterreturntypemustbeequaltothetypeoftheproperty,即'mypack
假设我有两个类,一个Base和一个扩展Base的Impl。packagemypackageopenclassBaseclassImpl:Base()我将如何为具体的Impl-Type(供内部使用)创建一个私有(private)属性,并将publicgetter键入为Base-Type,实现多态?我最初的做法是这样的:classTest{privatevalmyType=Impl()get():Base}但是,Kotlin编译器提示:Error:(30,11)Kotlin:Getterreturntypemustbeequaltothetypeoftheproperty,即'mypack
我有一个MyClass类,它拥有某个DataProvider类的一个实例,并为此提供了一个getter。为了依赖注入(inject),我更愿意有一个getter和一个setter。此外,DataProvider应包含在std::unique_pointer中:#include#includeclassDataProvider{public:DataProvider(){}virtual~DataProvider(){}/*stuff*/private:/*morestuff*/};classMyClass{public:MyClass(){}virtualinlineconstData
有时我需要暴露一些类(class)成员。例如在下面的例子中classMechanic可能需要直接访问Engine组件。由于多种原因,我已经多次读到所有字段都应该通过mutator(访问器)方法访问。但是在提供非const引用getter时有什么优势吗:classCar{public:Engine&engine(){returnm_engine;}//asaconsequenceyouwillalsoneedtoprovideconstversionconstEngine&engine()const{returnm_engine;}private:Enginem_engine;}简单地公
我想为某个类的每个对象添加唯一ID(在单个session中)。一种解决方案是使用增加一些静态计数器的工厂函数。一个更简单的解决方案是将这个计数器添加到类本身,例如:classfooWithUniqueId{public:fooWithUniqueId():id(next_id++){...};longid;private:staticlongnext_id=0;}然而,一个缺陷是id字段是公共(public)的,并且可以由调用者更改,因此违反了它的唯一性。传统的(好吧,至少在我看来)是将id设为私有(private),并使用getter函数来访问它,因此:classfooWithUni
我是Kotlin的新手,我尝试将一个小型Java项目重新设计为这种新语言。我在我的项目中使用了mongodb,并且我有一个类,例如:classPlayerEntity{constructor(){}//formongodbtocreateaninstanceconstructor(id:ObjectId,name:String){//usedincodethis.id=idthis.name=name}@org.mongodb.morphia.annotations.Idvarid:ObjectId?=nullvarname:String?=null}由于构造函数为空,我必须将id字段
我是Kotlin的新手,我尝试将一个小型Java项目重新设计为这种新语言。我在我的项目中使用了mongodb,并且我有一个类,例如:classPlayerEntity{constructor(){}//formongodbtocreateaninstanceconstructor(id:ObjectId,name:String){//usedincodethis.id=idthis.name=name}@org.mongodb.morphia.annotations.Idvarid:ObjectId?=nullvarname:String?=null}由于构造函数为空,我必须将id字段