inline - 为了在内联方法中使用它们而混淆对优先私有(private)但实际上是公共(public)类成员的访问的方法

标签 inline visibility kotlin

有哪些方法可以混淆或限制对类的公共(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/

相关文章:

css - 从内联 HTML 电子邮件中删除 header CSS 规则是否安全?

drupal-7 - 在 Drupal 7 中,如何使 block 在用户 View 页面上可见,但在用户编辑页面上不可见?

java - 如何实现可见性受限的Java图数据结构和类?

android - Exoplayer Mediaplayer Android延迟应用PlaybackParameters

安卓 Kotlin 。使用 fragment 将数据绑定(bind)到 recyclerview 时出现问题

css - 如何将页脚推到内容下方并内联显示?

java - Java "new Type[]{...}"数组文字初始化是什么类型的语法?

android - 调试Kotlin内联函数

CSS:隐藏对象是否可点击?

android - 手机静音时如何不播放声音?