强制打开或以其他方式模拟Kotlin中的类
我在Kotlin工作,我有一个无法修改的库(如果不维护我自己的这个巨大且快速变化的库的分支) 我需要实例化库中的一个类,它需要另一个类的实例来为它做一些事情。我需要改变第二个类的工作方式,这样它就可以向第一个类提供不同的信息。但是第二个类不是强制打开或以其他方式模拟Kotlin中的类,kotlin,inheritance,jvm,final,Kotlin,Inheritance,Jvm,Final,我在Kotlin工作,我有一个无法修改的库(如果不维护我自己的这个巨大且快速变化的库的分支) 我需要实例化库中的一个类,它需要另一个类的实例来为它做一些事情。我需要改变第二个类的工作方式,这样它就可以向第一个类提供不同的信息。但是第二个类不是open,第一个类通过其完整的非open类型请求它 我如何强行进入非开放类并扩展它,违背库作者的意愿?或者,我如何欺骗类型系统将我自己的类作为库要求的类的实例传递出去 我是否需要在JAR/构建系统级别上进行一些修改,以用我自己的版本替换库的类文件?我是否可以
open
,第一个类通过其完整的非open
类型请求它
我如何强行进入非开放类并扩展它,违背库作者的意愿?或者,我如何欺骗类型系统将我自己的类作为库要求的类的实例传递出去
我是否需要在JAR/构建系统级别上进行一些修改,以用我自己的版本替换库的类文件?我是否可以使用反射以某种方式模拟非open类?还有其他方法吗?没有简单的方法;我会更认真地寻找另一种实现目标的方法。(例如,库是否提供了另一种方式来执行您想要的操作,或者是否有其他库可供您使用。)-您不能欺骗类型系统,也不能扩展非打开的类,也不能在运行时替换类。您可能能够在构建时替换该类,但前提是该包没有被密封,这将是笨拙、危险和脆弱的。(或者理论上你可以编写你自己的类加载器来破解这个类,但这远不止如此……)要做到这一点没有任何简单的方法;我会更认真地寻找另一种实现目标的方法。(例如,库是否提供了另一种方式来执行您想要的操作,或者是否有其他库可供您使用。)-您不能欺骗类型系统,也不能扩展非打开的类,也不能在运行时替换类。您可能能够在构建时替换该类,但前提是该包没有被密封,这将是笨拙、危险和脆弱的。(或者从理论上讲,您可以编写自己的类加载器来攻击该类,但情况远不止如此……)