1

私は Thrift の初心者で、Thrift ジェネレーター ファイルを作成する際に助けていただければ幸いです。さまざまな言語の多数のクライアントで Java サーバーを使用したいと考えています。これらのファイルを自動生成するために Thrift を使用しています。

これが私のThriftファイルです:

namespace php example
namespace py example
namespace csharp example
namespace cpp example
namespace perl example
namespace d example
namespace java javaobjectmethods

struct ExternalLibraryItem {
    1: required string name
}

service ExampleService {
    list<ExternalLibraryItem> javaObjectMethod(1:i32 count)
}

パッケージ javaObject に別の Java ファイルのセットがあり、javaObjectMethod はパッケージ内のメソッドの 1 つです。ただし、このメソッドは、外部ライブラリによってインスタンス化されたオブジェクトを返します。これをThriftファイルに次のものなしで書き込むにはどうすればよいですか:

struct ExternalLibraryItem {
    1: required string name
}

現在、この行がないとサーバー ファイルを生成できません。

これが私のJavaファイルです:

package javaobjectmethods;

import externalLibrary.ExternalLibaryItem;
import externalLibrary.ExternalLibraryClass;

public class javaObject {
    private String file;

    public javaObject(String file) {
        this.file = file;
    }

    public List<ExternalLibraryItem> javaObjectMethod(int count) {
        // this method returns List<ExternalLibraryItem>
        return ExternalLibraryClass.doThis(count, this.file);
    }
}
4

1 に答える 1

0

簡単な答え: できません。

すべての Thriftstructsは、生成されたコードであることが期待されます。一部の言語では、そのような状況で役立つ部分クラス (C# など) が作成されますが、すべてではありません。また、場合によっては (C++)、基本クラスをある程度カスタマイズできます。Java の場合、

struct Foo {
  1: i32 bar
}

で始まるクラスになります

public class foo implements org.apache.thrift.TBase<foo, foo._Fields>, 
                            java.io.Serializable, 
                            Cloneable, 
                            Comparable<foo>

これはすべて、周囲のコードと構造によって必要とされ、期待されています。

特定のケースで考えられる解決策の 1 つは、内部クラスを Thrift クラスに、またはその逆に変換することです。

もちろん、これをよりうまく行うためのクールなアイデアがある場合は、高品質のパッチを提供します。

于 2014-03-26T19:03:11.527 に答える