java - 协调 thrift 中继承的缺失与 Java/Scala 中的方法定义

标签 java scala oop inheritance thrift

我在 Thrift 中定义了一组结构。从概念上讲,其中一些结构是公共(public)父类的子类。由于 Thrift 不支持结构继承,因此我使用以下策略来定义结构:

示例

假设AB是父类型P的子类型。以下是我的节俭定义来表示:

struct P {
  1: i32 childType,
  2: list<byte> payload
}

struct A {
  1: i32 x
}

struct B {
  1: i32 y
}

类型 A 和 B 的对象被序列化为类型 P 的记录(payload 字段将存储对象的序列化版本, childType 的值将指示序列化的有效负载是类型 A 还是 B)。在反序列化期间,childType 字段的值将指示需要如何反序列化payload

但是,当使用 Java 或 Scala 等面向对象语言编写代码时,这种方法会带来困难。例如,在返回类型 P 对象的函数中,我无法返回类型 A类型 B 的结果。

问题

(i) 有推荐的方法来处理这个问题吗?即,如何将 Thrift 中继承的缺乏与利用继承的 Java/Scala 代码协调起来?

提前致谢。

最佳答案

我不知道 Java/Scala 是否有更好的方法,但在我们的例子中,添加一个指向其“ super ”Thrift 结构的附加 Thrift 结构成员可以满足我们的要求。

struct Foo {
    1: i32 wtf
}

struct Bar {
    1 : Foo super_
    2 : double moredata
}

当然,这只是一种解决方法,但我们可以接受。

关于java - 协调 thrift 中继承的缺失与 Java/Scala 中的方法定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753651/

相关文章:

java - 在 Netbeans 中运行 Maven 项目

scala - 如何在 Spark 中将 parquet 文件拆分为多个分区?

scala - scala中的父类(super class)构造函数

ruby - Smalltalk 中的单一职责

javascript - 如何在不使用全局作用域的情况下将 javascript 分离到文件中?

java - 尝试从 arraylist 打印方法

Java 记录器使用 ... 函数

java - 我可以在java中使用列表作为数据库吗

在 Scalatra 中扩展 ResourceNotFoundException

javascript - 分离公共(public)代码的最佳设计实践?