gpt4 book ai didi

java - SBT scala 猴子补丁库

转载 作者:行者123 更新时间:2023-12-02 12:26:28 26 4
gpt4 key购买 nike

我想用带有更多参数的自定义类替换库中的案例类。

我不想从库中排除任何内容。我正在做的是在我的项目上创建一个具有相同包名称的类,但它在运行时引发错误。

示例:

  • 库:mamilo.rosa.jar:/com/mamilo/rosa/Cas​​eClassA.scala
  • 我的项目:src/scala/com/mamilo/rosa/Cas​​eClassA.scala

我想要做的是从库中删除该类或用我的类替换它,但它仍然会引发运行时错误:

java.lang.NoSuchMethodError: com.mamilo.rosa.CaseClassA.<init>(Lscala/collection/Seq;...)

编辑

我正在尝试向此案例类添加一个新参数:https://github.com/sksamuel/elastic4s/blob/master/elastic4s-core/src/main/scala/com/sksamuel/elastic4s/searches/SearchDefinition.scala

它将被使用并转换为 HTTP 请求(我也会尝试覆盖)。我想做的是在他的库上添加一些更改,当它变得良好时,我可以提交包含一些更改的 PR,但我正在包含此库作为依赖项的项目上执行此操作。

最佳答案

这里有两个选择:

1) 添加隐式类转换,例如RichSearchDefinition,当隐式转换在范围内时,它允许您使用自己的方法。这被称为“丰富我的图书馆”(或有时“拉皮条我的图书馆”)模式。代码大致如下:

object Implicits {
implicit class RichSearchDefiniton(sd: SearchDefinition) {
// Define methods here that you'd like to use on `SearchDefinition`
def printSomething: Unit = println("This is an example of enriching a library.")
}
}

无论您在哪里需要此功能,都可以简单地导入隐式转换:import mypackage.Implicits._

2) 在本地对库进行更改,将版本号更改为 0.0.1-LOCAL 之类的内容,然后使用 sbtpublishLocal 发布其本地副本。在您的项目中,您可以依赖这个本地发布的库。当您对它的工作效果感到满意时,您可以提交包含更改的拉取请求。这里需要注意的是,如果通过另一个依赖项传递地包含 elastic4s ,则必须 exclude它在您的 build.sbt 文件中

关于java - SBT scala 猴子补丁库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45446170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com