gpt4 book ai didi

java - 使用 Scala 装饰 Java 库对象

转载 作者:行者123 更新时间:2023-12-01 19:02:09 25 4
gpt4 key购买 nike

我依赖于一个旧的 Java API,它有点糟糕并且喜欢在数据丢失时抛出空指针异常。我想创建一个具有选项类型访问器但保留旧访问器的子类,直到我决定需要为它们创建安全访问器。有没有一种好方法可以从原始对象的副本创建子类?我想实现如下目标:

SafeIssue extends Issue {
def safeMethod: Option[Value] = { //... }
}


val issue = oldapi.getIssue()
val safeIssue = SafeIssue(issue)

//Preserves issue's methods and data if I need them
val unsafeVal = safeIssue.unsafeMethod
val maybeVal = safeIssue.safeMethod

最佳答案

为什么不尝试隐式转换呢?这对于喜欢创建自己的对象的 Java API 来说效果更好。所以你会

class SafeIssue(issue: Issue) {
def original = issue
def safeFoo = Option(issue.foo)
// ... You must write any of these you need
}
implicit def make_issues_safe(issue: Issue) = new SafeIssue(issue)

然后你就可以——只要你提供了方法——编写类似的内容

val yay = Issue.myStaticFactoryMethodThing.safeFoo.map(x => pleaseNoNull(x))

(然后您可以决定是否要在代码中携带 SafeIssueIssue,并且您始终可以取回 Issue来自 SafeIssue 和公开的 original 方法(或者您可以将 issue 参数设置为 val。)

关于java - 使用 Scala 装饰 Java 库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11851139/

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