Groovy覆盖'或'for Integer to'或'with another Integer

时间:2012-03-05 14:34:19

标签: groovy

在Groovy中,一切都是对象,甚至是数字

assert 1.getClass() == Integer

在Groovy中,您可以覆盖运行时现有类中的现有方法

Integer.metaClass.or = { right -> println "$delegate or $right" }

现在我们可以使用管道(|)

对任何号码进行呼叫或操作
1.or("hello") // prints: 1 or hello
1 | "hello" // prints: 1 or hello

到目前为止一切顺利。现在让我们尝试带有整数的整数

2.or(3) // nothing happens
2 | 3 // nothing happens

这引导我们进入问题

  • 为什么没有发生?
  • 这是一个优化错误吗?
  • 如何使其适用于任何类型?

1 个答案:

答案 0 :(得分:1)

它可能选择一个已经存在的or方法,该方法采用整数,而不是更通用的对象版本。

如果你这样做,它是否有效:

Integer.metaClass.or = { Integer right -> println "$delegate or $right" }

目前不在电脑上,因此无法验证: - /