Java生成的Protobuf反射,但没有找到类

时间:2016-08-12 17:55:55

标签: java reflection protocol-buffers classnotfoundexception

我经常使用protobuf。但是今天,当我尝试在生成的protobuf类上使用反射时,我得到了一个未找到类的异常。 (我知道这不是一个普通的protobuf用例)。该类通过其他方法在同一个文件中使用,并且编译并运行没有问题。

import com.foo.protobuf.Foo.Bar;
...
void method1() {
    Bar.Builder bld = Bar.newBuilder();
    ...
}


void method2(String clsName) {
    // clsName = "com.foo.protobuf.Foo.Bar"
    Class clsBar = Class.forName(clsName); // CNF Exception here
}

我的代码出了什么问题? 感谢您的任何意见。

2 个答案:

答案 0 :(得分:3)

刚刚发现它与protobuf无关。它是关于如何引用内部阶级的。

所有生成的protobuf类都是静态内部类。为了使其有效,我必须使用' $'而不是'而不是'表示完全限定类名的最后一部分:Class.forName(" com.foo.protobuf.Foo $ Bar")。

很抱歉回答我自己的问题。希望它可以帮助处于相同情况的人。

答案 1 :(得分:0)

一切都很完美。

问题的可能性。

  

您的类路径已损坏(这是Java世界中一个非常常见的问题)。

如果你知道类的路径或包含类的jar,那么在运行它时将它添加到类路径中。您可以使用此处提到的类路径:

Windows上的

java -classpath .;yourjar.jar YourMainClass
on UNIX/Linux

java -classpath .:yourjar.jar YourMainClass
  

在您的情况下答案是

所有生成的protobuf类都是静态内部类。为了使它工作,我必须使用'$'而不是'。'表示完全限定类名的最后一部分:Class.forName(“com.foo.protobuf.Foo $ Bar”)。