有哪些方法可以混淆或限制对类的公共(public)成员的访问?
这样做的动机是我希望能够内联
一个方法,但它需要访问类中的其他成员,这要求它们是public
,但是我更希望这些成员不是 public
,但由于它们必须是 public
,我正在寻找混淆或限制对它们的访问的方法。
这是我希望 preferablyPrivateLock
是私有(private)的这种情况的示例:
class SomeClass
{
val preferablyPrivateLock = ReentrantLock()
inline fun <R> fancyInlineFunction(function:()->R):R
{
preferablyPrivateLock.lock()
try
{
return function()
}
finally
{
preferablyPrivateLock.unlock()
}
}
}
附言我知道这似乎是糟糕的 OO 设计;希望这个问题不会让我失去任何声誉......
最佳答案
这是一种在 extensions 的帮助下混淆对 preferablyPrivateLock
的访问的方法:
class SomeClass
{
private val preferablyPrivateLock = ReentrantLock()
val Unit.obfuscatedLock:ReentrantLock
get() = preferablyPrivateLock
inline fun <R> fancyInlineFunction(function:()->R):R
{
with(this) {Unit.obfuscatedLock}.lock()
try
{
return function()
}
finally
{
with(this) {Unit.obfuscatedLock}.unlock()
}
}
}
关于inline - 为了在内联方法中使用它们而混淆对优先私有(private)但实际上是公共(public)类成员的访问的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573333/