以多态方式处理很多相似的单态类

问题描述 投票:0回答:1

我有一个library,它生成了一堆看起来非常相似的Java类。为简便起见,让我们在Kotlin中指定类似的内容:

data class A(val commonParam1: String, val commonParam2: String, val specialParam: Int)
data class B(val commonParam1: String, val commonParam2: String, val specialParam: String)
data class C(val commonParam1: String, val commonParam2: String, val specialParam: Boolean)
data class D(val commonParam1: String, val commonParam2: String, val specialParam: Float)

显然,最好生成一个通用类或接口:

data class G<T>(val commonParam1: String, val commonParam2: String, val specialParam: T)

但是该库不会生成这种代码。我有数十个此类,并且它们在不同的位置生成,所以这是一个[[m×n的情况。不幸的是,这些类没有共享一个通用接口(我可以使用。)因此,按照我的看法,有五个选项可以解决此问题:

    编写与任何生成的类一起使用的所有代码
  • m×n
次。这是一堆重复的事情,但是一点也不复杂,而且很安全。使用反射。首先生成这些类的想法是提高类型的安全性。反思会再次把它扔出窗外,所以感觉适得其反]
  • 将代码生成用于我自己的代码。感觉上有些笨拙,我的团队也没有代码生成经验
  • 使用ArrowKT typeclassesExtension Interfaces很好,但我可能会摆脱目前存在的黑客攻击。我仍然必须提供很多样板文件,因为我必须为每种此类的接口提供证据]
  • 使用Arrow-Meta准引号,但我认为我不应该在生产中使用Arrow-Meta
  • 我还有其他选择吗?是否有一种方法可以抽象类似的类?


    在这种具体情况下,我的Graphql模式具有很多变异,这些变异都MutationInputs非常相似。我们不直接控制架构的形状。由于每个突变也都有其自己的输入和输出类型,因此即使我随意使用片段,构造这些突变并解释其输出也是一件繁琐的事情,其中​​包含很多重复的代码,因为即使提取片段的代码也必须重复。 >

    这在Graphql中通常不成问题,因为它大多数是在JS或TS中完成的,它们都具有鸭子类型。 Kotlin没有鸭子打字法。

    我有一个库,该库生成一堆看起来非常相似的Java类。为了简洁起见,让我们在Kotlin中指定类似的内容:数据类A(val commonParam1:String,val ...

  • kotlin jvm graphql apollo-android
    1个回答
    0
    投票
    您可以使用具有默认功能实现的接口来提供通用基础:
    © www.soinside.com 2019 - 2024. All rights reserved.