Java JVM嵌套类名无效?

Java JVM嵌套类名无效?,java,jvm,verifyerror,Java,Jvm,Verifyerror,当前我正在使用的基于JVM的编程语言的编译器在编译后使用此代码运行指定的main方法: URL url = DyvilCompiler.config.outputDir.toURI().toURL(); Class c = Class.forName(mainType, false, new URLClassLoader(new URL[] { url }, ClassLoader.getSystemClassLoader())); Method m = c.getMethod("ma

当前我正在使用的基于JVM的编程语言的编译器在编译后使用此代码运行指定的
main
方法:

URL url = DyvilCompiler.config.outputDir.toURI().toURL();
Class c = Class.forName(mainType, false, new URLClassLoader(new URL[] { url }, ClassLoader.getSystemClassLoader()));
Method m = c.getMethod("main", String[].class);
m.invoke(null, new Object[] { args });
但是,在编译此代码时:

package dyvil.test
// some uninteresting import stuff
public class Main
{   
    @ArrayConvertible
    case class IntVector([int] ints = [ 1, 2 ])
    
    public static void main([String] args)
    {
        println(IntVector())
        println([ 1, 2, 3 ] as IntVector)
    }
}
类加载器与内部类(实际上是一个嵌套的
static
类)一起失败:

请注意,为Main
dyvil/test/Main
和IntVector
dyvil/test/Main$IntVector
生成的类文件定义了内部类关系:

Inner classes:
    [inner class info: #2 dyvil/test/Main$IntVector, outer class info: #7 dyvil/test/Main
     inner name: #9 IntVector, accessflags: 8 static]
  Enclosing Method: #7  #0 dyvil/test/Main

Ldyvil/test/Main$IntVector有什么问题签名?

另外,将输出目录添加到类路径并将代码更改为

Class c = Class.forName(mainType)
一切正常,没有任何错误



EDIT:这不仅会导致JVM出现问题,而且当在Eclipse中通过
import
导入类似的类时,代码完成会完全停止工作。

case-class IntVector([int]ints=[1,2])
据我所知不是有效的Java语句。这不是Scala代码吗?它是一种自定义编程语言和一个自定义编译器。哦,我看到我第一次读这个问题时错过了这一部分,对不起;)猜测一下,我认为您使用的是一个签名(带有“L”和“;”),其中只需要类名。奇怪的是,改变类加载器会带来不同。哎呀,看起来我发现了错误。我确实使用了签名,而不是带有
CHECKCAST
指令的类名。但仍然有趣的是,使用URLClassLoader而不是默认的加载程序会导致此错误。
Class c = Class.forName(mainType)