如何在自定义类加载器中处理类 [B
我想通过 Scala RemoteActor API 发送类数据。我制作了一个自定义类加载器,但加载类[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
}
I want to send class data through the Scala RemoteActor API. I made a custom ClassLoader but it has trouble loading the class [B
. I have found out that it represents byte[]
in Java. How could I handle this problem? Here is the loadClass method of my ClassLoader.
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
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
java 类
byte[]
与Array[Byte]
同义,因此如果您遇到名为"[B"
的类,那么可以简单地得到直接类classOf[Array[Byte]]
因为它是语言的原语。不幸的是,事情比这更复杂。还有更多的 Java 数组原语需要处理。看看下面的类是如何命名的。
请注意最后一个的类型擦除。并且还需要处理嵌套数组。
The java class
byte[]
is synonymous withArray[Byte]
so if you encounter a class named"[B"
then one could simply get the class directlyclassOf[Array[Byte]]
since is a primitive of the language.Unfortunately, things are more complicated than that. There are more java array primitives that need to be handled as well. See how the following classes are named.
Notice the type erasure on the last one. And also nested arrays need to be handled as well.
数组类必须使用 Class.forName 加载:
Array classes must be loaded with
Class.forName
: