gpt4 book ai didi

scala - 如何通过反射调用私有(private)构造函数?

转载 作者:行者123 更新时间:2023-12-01 11:42:20 25 4
gpt4 key购买 nike

当我从类成员中选择一个私有(private)构造函数并尝试实例化一个对象时,抛出了一个 java.lang.NoSuchMethod 异常。

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> class test private( s: String ) {
| def this( i: Int ) = this( i.toString ) // public
| }
defined class test

scala> val mirror = runtimeMirror( getClass.getClassLoader )
mirror: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.ns...

scala> val cls = mirror.classSymbol( classOf[test] )
cls: reflect.runtime.universe.ClassSymbol = class test

scala> cls.toType.members.toSeq
res0: reflect.runtime.universe.MemberScope = Scopes(constructor test, constructor test, value s, meth...

scala> val prv = res0( 1 ).asMethod
prv: reflect.runtime.universe.MethodSymbol = constructor test

scala> val pub = res0( 0 ).asMethod
pub: reflect.runtime.universe.MethodSymbol = constructor test

scala> mirror.reflectClass( cls ).reflectConstructor( pub ).apply( 1 )
res3: Any = test@6926e27

scala> mirror.reflectClass( cls ).reflectConstructor( prv ).apply( "1" )
java.lang.NoSuchMethodException: test.<init>(java.lang.String) ...

我希望找到允许我将私有(private)构造函数标记为可访问的方法,但我找不到任何方法。

最佳答案

这似乎是一个错误。

其他成员查找使用getDeclaredXXX,从this commit of ConstructorMirror的前后一目了然。它始终旨在 setAccessible

关于scala - 如何通过反射调用私有(private)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18564304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com