我们已经说过了:
interface Container
package com.one
class ContainerImplOne extends Container
package com.two
class ContainerImplTwo extends Container
我们有许多实现从Container继承但位于不同的包中。如果我们有一个带有类型Container的函数:
def compute(c: Container): Unit
我们不知道传入的对象是来自包com.one还是com.two。有没有办法限制计算功能从包2中获取Container实例?换句话说,有没有办法将类型限制为com.Two。*?我们可以用Java或Scala做到这一点吗?
答案 0 :(得分:1)
你可以(如果你真的,真的,真的需要;如果我曾经看过这样做的图书馆,除了可能解决com.one
中的已知错误,我会不惜一切代价避免它) :
def compute(c: Container): Unit = {
if (c.getClass.getPackage.getName == "com.two") {
...
} else {
// do nothing, or throw an exception, etc.
}
}
您可以修改它以支持在com.two
中扩展类的类。
这在运行时失败而不是在编译时失败,你可以创建一个在编译时失败的宏。