4

私がJVMを使用している場合、これを行うことができます:

object Playground {

    class DynamicInvocationHandler : InvocationHandler {

        @Throws(Throwable::class)
        override operator fun invoke(proxy: Any, method: Method, args: Array<Any>): Any {
            LOGGER.info("Invoked method: {}", method.name)

            return 42
        }

        companion object {

            private val LOGGER = LoggerFactory.getLogger(
                    DynamicInvocationHandler::class.java)
        }
    }

    @JvmStatic
    fun main(args: Array<String>) {
        val proxy = Proxy.newProxyInstance(
                Playground::class.java.classLoader,
                arrayOf<Class<*>>(MutableMap::class.java),
                DynamicInvocationHandler()) as MutableMap<String, String>

        proxy["foo"] = "bar"
    }
}

これを実行すると、 が出力されますInvoked method: putKotlin共通プロジェクトでこのようなことを行うにはどうすればよいですか?

編集:共通モジュールで Java から何かを使用しようとはしていません。私は一般的なプロジェクトがどのように機能するかを知っています。代わりに私が興味を持っているのは、これに対する Kotlin ベースのソリューションがあるかどうかです。

編集 2:Mapクラスをプロキシしようとしていません。任意のインターフェイスProxyをプロキシするために使用できる JDK のようなものを探しています。混乱させて申し訳ありません。

4

3 に答える 3