- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Thrift 中是否有推荐的标识符命名约定?
例如,我们有一个 Thrift IDL,由通常是 C# 程序员的人编写。由此生成的源代码可以在 C# 和 Python 中运行。然而,尽管可以从同一个 Thrift 文件生成 Java 代码,但 IDL 作者给出的标识符名称与其类型完全相同的地方都会出现 Java 编译器错误。例如:
enum DataType {
Text,
Integer
}
struct Metadata {
1: string ColumnName,
2: DataType DataType
}
请注意,“DataType”标识符与其类型具有相同的名称(包括大小写)。生成的 Java 代码(使用 --gen java
Thrift 编译器选项)具有如下编译器错误:
Cannot make a static reference to the non-static field DataType
我自己不是 C# 程序员,但我知道以大写字母开头的标识符名称在 C# 中是很常见的做法。按照目前的情况,我们将不得不更改 IDL 以使用小写字母作为标识符名称(例如,DataType dataType
)并重新生成所有客户端;但如果对 Thrift 标识符的命名约定有一些建议,那将会有所帮助,这样我们就不会在其他语言中遇到类似的问题。
顺便说一句,我确实尝试过 --gen java:nocamel
但这并没有解决问题。
最佳答案
除了标识符的常用规则和编译器告诉您的内容之外,没有强制执行或官方推荐的命名约定。尽管许多已知的冲突已经应用了某种解决方法,但仍然存在很多发生冲突的可能性。您必须找出适合您的方法。
最好的选择是重命名 IDL 文件中的冲突字段,或者添加下划线。对于RPC和序列化,字段名称并不重要,只有字段ID很重要。因此,重命名字段并不是序列化数据的兼容性破坏者,仅涉及源代码,这是可以修复的。
<小时/>编辑:Here is a nice example对于仍然悬而未决的命名问题。由于 the nature of the problem ,它仅用一种非常特定的语言来体现:Go。只要您坚持使用 Thrift 支持的任何其他语言,您就永远不会遇到该 IDL 的麻烦。尽管如此,这样的事情应该得到解决。
关于c# - 为了最大限度地提高跨语言兼容性,推荐的 Thrift 标识符命名约定是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22691634/
我正在使用 Ubuntu 10.04 LTS 机器,我在该机器上克隆了 Thrift 的 git 存储库并从源代码本地构建它。但是最新版本的 API 有一些变化,这导致应用程序的构建过程失败。 由于仅
尽管 Thrift 格式使用相对广泛(并且项目仍然存在),但我无法找到底层数据格式的规范。或格式,因为显然至少有两种格式;标准之一,紧凑的格式。 鉴于它的广泛使用,我希望它只是我可怜的 google-
每个参数(字段标识符)之前的数字的用途是什么?为什么从 5 跳到 16? struct Tweet { 1: required i32 userId; 2: required stri
我已经在 mac 中安装了 thrift。 从终端看起来 thrift 已成功安装但是当我尝试运行 thrift 命令时,我得到以下信息 Thrift: command not found 我从终端使
我在 c++ 中有一个结构,它存储这样的字节: struct RemoteData { /// some other fields here unsigned char* buf;
我想在 IDL 文件中定义几个结构。然后在服务中返回该结构类型的对象。为此,我必须导入该结构。如何在 IDL 中导入它们。 namespace java abc.xyz struct struct_{
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我使用thrift编译器(0.9.3)生成gen-go文件夹,同时编译器生成一个函数thrift.PrependError,在thrift 包(git.apache.org/thrift.git/li
假设我在包含两个字段的 Apache Thrift IDL 文件中定义了一个结构。例如: struct Thing { 1: optional string name, 2: optional
是否有可能使用 Thrift 来表示诸如 Java 类型 Map 之类的东西,其中 Map 中的值是已知的,例如是字符串还是整数? 换句话说,是否有任何方法来表示实际基类型仅在运行时已知但保证是一组预
我需要使用 Ruby 实现 Thrift API。 在生产环境中运行服务器有哪些选项? 最好的选择是什么? 目前我只是实例化一个 SimpleServer 并在其上调用 #serve。这显然是一个蹩脚
我正在查看 thirft 代码生成器的文档。它是这样开始的: Usage: thrift [options] file Options: -version Print the compile
所有教程和文档都建议每个 Thrift 服务器可以提供一项服务(1 个处理程序 1 个处理器 1 个服务器,全部在构造函数等中给出)。 从我的观点(优雅的设计)来看,如果许多或所有服务定义可以独立会更
我正在寻找 C++ 异步客户端和非阻塞 C++ 服务器实现。我在 apache 中看到一些邮件文件,但该事件是 2009 年末的。想知道最新的 thrift 是否支持它。我正在对 C++ 代码使用 c
我一直在研究使用 Apache Thrift,但发现文档有些缺乏。现在我有兴趣看到支持的目标语言以及每种语言支持的协议(protocol),是否有这样的矩阵? 最佳答案 试试这个: Thrift La
使用 C++ Apache Thrift 库,是否可以仅使用序列化/反序列化而不使用 RPC 服务? 据我了解 this页面,可以使用 Java 库来完成。但是,我找不到 C++ 库的类似类。 最佳答
Thrift 解析器有一个“注解”的定义: https://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob;f=compiler/cpp/src
我的组织设置了一个 Spark Thrift 服务器,该服务器配置为使用 HTTP 上的 SSL。目的是使 Power BI 能够通过 Spark 安全地检索数据。然而,仅仅检索架构信息可能需要长达
我正在我的 Mac 上运行一对使用 Apache Thrift 进行通信的客户端和服务器程序。在我们的生产系统中,我们可能最终会遇到客户端使用TJSONProtocol,服务端使用TBinaryPro
来自 Thrift website 的示例 int multiply(1:int n1, 2:int n2); 为什么我们必须使用标签 1:和 2:在变量名之前,这个标签的目的是什么? 最佳答案 这些
我是一名优秀的程序员,十分优秀!