gpt4 book ai didi

java - 如何在自定义 ClassLoader 中处理类 [B

转载 作者:行者123 更新时间:2023-11-30 09:41:59 24 4
gpt4 key购买 nike

我想通过 Scala RemoteActor API 发送类数据。我制作了一个自定义的 ClassLoader,但它无法加载类 [B。我发现它代表 Java 中的 byte[]。我该如何处理这个问题?这是我的 ClassLoader 的 loadClass 方法。

override def loadClass(name: String): Class[_] = {
if(ClientEntry.verbose) println("loadClass "+name)
var c = findLoadedClass(name)

if (c == null) {
try {
c = findSystemClass(name)
} catch { case _ => null}
}
if (c == null) {
try {
c = defaultloader.loadClass(name)
} catch {
case _ => c = loadRemoteClass(name)
}
}
resolveClass(c)
c
}

最佳答案

Java 类 byte[]Array[Byte] 的同义词,所以如果你遇到一个名为 [B" 的类,那么一个可以简单地直接获取类 classOf[Array[Byte]] 因为它是语言的原语。

if ( name == "[B" )
c = classOf[Array[Byte]]

不幸的是,事情要复杂得多。还有更多的 java 数组原语需要处理。查看以下类的命名方式。

println( classOf[Array[Boolean]].getName ) // "[Z"
println( classOf[Array[Byte]].getName ) // "[B"
println( classOf[Array[Char]].getName ) // "[C"
println( classOf[Array[Int]].getName ) // "[I"
println( classOf[Array[Long]].getName ) // "[J"
println( classOf[Array[Double]].getName ) // "[D"
println( classOf[Array[Float]].getName ) // "[F"
println( classOf[Array[String]].getName ) // "[Ljava.lang.String;"
println( classOf[Array[Any]].getName ) // "[Ljava.lang.Object;"
println( classOf[Array[Option[Any]]].getName ) // "[Lscala.Option;"

注意最后一个上的类型删除。还需要处理嵌套数组。

println( classOf[Array[Array[Boolean]]].getName ) // "[[Z"
println( classOf[Array[Array[Array[Boolean]]]].getName ) // "[[[Z"
println( classOf[Array[Array[Option[_]]]].getName ) // "[[Lscala.Option;"
println( classOf[Array[Array[Array[Option[_]]]]].getName ) // "[[[Lscala.Option;"

关于java - 如何在自定义 ClassLoader 中处理类 [B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794611/

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