Экономия: использование внешнего Java-класса в определении списка
Я новичок в 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)
}
У меня есть отдельный набор файлов Java, который находится в пакете javaObject, и javaObjectMethod является одним из методов в пакете. Однако этот метод возвращает объект, экземпляр которого создается внешней библиотекой. Как мне написать это в файле 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);
}
}
1 ответ
Краткий ответ: вы не можете.
Все бережливость structs
Ожидается, что будет сгенерирован код. Для некоторых языков создаются частичные классы, которые (например, 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>
что все необходимо и ожидается от окружающего кода и структур.
Одним из возможных решений для вашего конкретного случая является преобразование внутренних классов в классы Thrift и наоборот.
Конечно, если у вас есть отличная идея, как сделать это лучше - мы открыты для качественных патчей.