3

文字列と生のバイトにメッセージタイプ名があります。これらの材料でJavaオブジェクトを作成する方法は? b. プロト

pakage foo;
message Bar {
 required int32 id = 1;
 required string name = 2;
}

TestMain.java

foo.Bar bar = foo.Bar.newBuilder()
.setId(1).setName("foobar").build();
byte[] rawbytes = bar.toByteArray();
String typeName = bar.getDescriptorForType().getFullName();

foo.Bar b = (foo.Bar) howTo(rawbyte, typeName);
4

1 に答える 1

5

コメントで述べたように、私にはまったく無意味に思えますが、リフレクションを簡単に使用できます。

public static Object parseDynamic(String type, byte[] bytes) {
    try {
        Class<?> clazz = Class.forName(type);
        Method method = clazz.getDeclaredMethod("parseFrom", byte[].class);
        return method.invoke(null, bytes);
    } catch (NoSuchMethodException e) {
        throw new IllegalArgumentException("Non-message type", e);
    } catch (IllegalAccessException e) {
        throw new IllegalArgumentException("Non-message type", e);
    } catch (InvocationTargetException e) {
        // TODO: Work out what exactly you want to do.
        throw new IllegalArgumentException("Bad data?", e);
    }
}
于 2013-04-12T05:58:01.330 に答える