“公共只读”访问修饰符?
Posted
技术标签:
【中文标题】“公共只读”访问修饰符?【英文标题】:"public read-only" access modifier? 【发布时间】:2019-07-15 09:52:57 【问题描述】:“传统”实现:
interface IFoo
fun getS():String
fun modifyS():Unit
class Foo : IFoo
private var s = "bar"
override fun getS() = s.toUpperCase()
override fun modifyS() s = when(s)
"bar" -> "baz"
else -> "bar"
我现在想要的是这样的:
interface IFoo
var s:String
protected set
fun modifyS():Unit
class Foo : IFoo
override var s = "bar"
protected set
get() = field.toUpperCase()
override fun modifyS() s = when(s)
"bar" -> "baz"
else -> "bar"
我有一种预感,答案是否定的,但是……
有什么办法可以做到这一点?
【问题讨论】:
【参考方案1】:无法将接口成员的可见性限制为protected
。
但是,您可以在接口中定义val
,在实现中定义override it with a var
:
interface IFoo
val s: String
class Foo : IFoo
override var s = "bar"
protected set
get() = field.toUpperCase()
【讨论】:
以上是关于“公共只读”访问修饰符?的主要内容,如果未能解决你的问题,请参考以下文章
在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?