gpt4 book ai didi

Scala:比较类型

转载 作者:行者123 更新时间:2023-12-05 04:18:31 24 4
gpt4 key购买 nike

我想定义一个可以比较两个类类型的函数。我定义了两个不同的类:

abstract class Task
case class DefinedTask(id: Long) extends Task
case class EmptyTask() extends Task

然后我有一个函数返回类型为 Task 的对象,它可以是 DefinedTaskEmptyTask

现在,我想要做的是有一个函数来识别这个对象是 DefinedTask 还是只是一个 EmptyTask。问题很简单,我会使用模式匹配。但我想概括一下,因为多个类都符合这种 Defined/Empty 模式。

到目前为止我尝试过的是:

def makeReturned[T: Manifest, U: Manifest](obj: T)(u: U)(f: T => Value) = 
if(manifest[U] equals manifest[T]) f(obj) else
throw new IllegalArgumentException()
}
//call to it
makeReturned(task)(DefinedTask)(makeTask)

U 始终是 DefinedTaskT 可以是 DefinedTask 或 EmptyTask,但返回为 任务

manifest[U].erasure.toString //"class DefinedTask$"
manifest[T].erasure.toString //"class Task"

从编译器的角度来看,这是正确的,但不适合我。所以,我的问题是我怎样才能以一种能给我想要的东西的方式比较它们?

最佳答案

看起来你想要运行时,而不是编译时检查。所以我想你的意思是

def makeReturned[U <: Task, T <: Task](obj: T)(u: U)(f: T => Value) = {
if (obj.getClass.isInstance(u.getClass)) f(obj)
else throw new IllegalArgumentException
}

或类似的东西。查看 java.lang.Class 上的方法,然后选择一个可以满足您需要的方法。

关于Scala:比较类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13275542/

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