1

标题基本上是这样说的。

有没有办法new Object {def foo = "bar"}isInstanceOf[<structural_type_here>]通话中使用 eg 的类型?

4

2 回答 2

3

我想说您可以使用类型别名:

type HasFooMethod = { def foo: String }
val v = new Object {def foo = "bar"}
v.isInstanceOf[HasFooMethod]

但这总是会返回真实的,这要归功于擦除。

因此,您可以使用反射,或者只是尝试将对象传递给以结构类型作为参数的方法 - 如果它无效,编译器将出错。

于 2011-01-30T19:25:07.883 回答
3

结构类型不适用于isInstanceOf. 同样,结构类型的模式匹配是没有意义的(它们总是匹配的)。

这通常归咎于类型擦除,但即使没有擦除它也不起作用,因为 JVM 不理解结构类型。

另一方面,Scala可能足够聪明,可以通过擦除来进行结构类型检查。

于 2011-01-30T22:37:29.433 回答