Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用工会列表是一种良好的做法吗?_Java_C++_Thrift - Fatal编程技术网

Java 使用工会列表是一种良好的做法吗?

Java 使用工会列表是一种良好的做法吗?,java,c++,thrift,Java,C++,Thrift,节俭联盟,顾名思义 提供一种方法,以精确传输一组可能的数据中的一个字段 字段,就像C++中的联合{}。因此,工会成员 隐式地认为是可选的(参见requiredness) 我的推理是,除了C++以外,任何类型的联合都不存在。每次我在Java中使用这个契约时,我都需要将这个集合一分为二,进行一些单独的处理,然后再次合并两个列表。 当您试图访问某个字段时,此类型的唯一用途是用于单个对象,如果未设置,则使用另一个字段 有没有任何情况,你应该使用联合对象集合代替两个单独的集合?< /P> < P>不要尝试

节俭联盟,顾名思义

提供一种方法,以精确传输一组可能的数据中的一个字段 字段,就像C++中的联合{}。因此,工会成员 隐式地认为是可选的(参见requiredness)

我的推理是,除了C++以外,任何类型的联合都不存在。每次我在Java中使用这个契约时,我都需要将这个集合一分为二,进行一些单独的处理,然后再次合并两个列表。 当您试图访问某个字段时,此类型的唯一用途是用于单个对象,如果未设置,则使用另一个字段


有没有任何情况,你应该使用联合对象集合代替两个单独的集合?< /P> < P>不要尝试将C++翻译成java。在大多数情况下,翻译是不可能的。当前类似Java的语言就像内存不存在一样。原因是简单。学习这种语言要容易得多。这就是他们没有工会的原因。在帕斯卡也有工会。旧语言不会假装记忆不存在。


使用联合列表有很多用例。例如,如果需要将参数传递给外部函数,则可以创建基于UNION的变体类型,并用const变体和参数封装多个函数调用。

C和C++对工会进行不同的处理,因此需要从缩小到两个中的一个开始。这个库继承了C或C++的联合行为吗?即使一个框架可以从多个语言使用,也不要用语言标签来进行垃圾邮件。只使用你实际编程的语言的标签。“有些程序员的想法是让C++和节俭用户回答问题。但是谢谢你的反馈@Lundin的定义是C++联合体?不,使用工会不是一个好的做法。它们在一些低级应用程序中可能很有用,但最好避免使用它们。另外,如果您需要一个并集,比如说
union{inta;short b[2]}
,您可以用
short b[2]替换它;int&a=*(int*)(void*)&b
。这不是很有效,但优化应该能够解决它。。。此外,这两种选择都不是好的做法。在C++17中,他们添加了
std::variant
,这在大多数情况下是一个更好的选择。