【发布时间】:2014-07-20 22:46:11
【问题描述】:
我的服务器是用 Java 编写的(在 GAE 上)。它包括一些我与 Android 客户端共享的数据类,现在也想与 Dart 网络客户端共享。
“共享”是指我将它们序列化为 JSON 并使用 HTTP 或 GCM 在客户端和服务器之间同步它们。
所以,我正在寻找一种工具,它可以为相关的 Java 类生成 Dart 等价物,因此我不必手动创建它们。
【问题讨论】:
我的服务器是用 Java 编写的(在 GAE 上)。它包括一些我与 Android 客户端共享的数据类,现在也想与 Dart 网络客户端共享。
“共享”是指我将它们序列化为 JSON 并使用 HTTP 或 GCM 在客户端和服务器之间同步它们。
所以,我正在寻找一种工具,它可以为相关的 Java 类生成 Dart 等价物,因此我不必手动创建它们。
【问题讨论】:
Google Cloud Endpoints 执行此操作(将数据类从 GAE 语言转换为客户端语言),但 Dart 目前不在支持语言中。
我猜 GCE 可以用来生成 js,然后可以在 Dart 应用程序中使用,但这并不理想。所以我认为这是一个可能的解决方案,但不是一个足够的解决方案。
另一个问题是代码转换与 GCE 服务紧密绑定 - 它不能独立于 GCE 使用,让 GCE 转换您的类的唯一方法是将它们包含在 GCE 接口中.
(如果他们在 GCE 中加入 Dart 支持,让代码翻译器更加独立于 GCE,并添加一些功能,例如 @Ignore 属性,我认为这将非常有用!)
【讨论】:
“ad-hoc Java-to-Dart translator”由 Stefan Matthias Aust “在三天内完成”(最后一次修订于 2014-01-03)。作者指出“可能存在错误”,并且“我没有涵盖注释和一些深奥的[原文如此] 泛型语法。”
他提供了一些有用的指导方针,让你的 Java 代码保持友好:
“因为 Dart 不支持重载方法,我强烈建议先重命名(使用您最喜欢的 IDE)Java 中的那些方法。我还注意到 Dart 不喜欢类型、字段或方法具有相同名称. 同样,我建议在翻译之前重命名所有此类事件。他还指出,Dart 不支持字符类型。
【讨论】:
您可以使用此包为 Google Cloud Endpoints http://pub.dartlang.org/packages/discovery_api_client_generator 生成 Dart 客户端代码。
我也成功地将协议缓冲区用于类似的场景
- http://pub.dartlang.org/search?q=protobuf
- http://pub.dartlang.org/packages/protobuf_builder
另见https://developers.google.com/protocol-buffers/
【讨论】: