【发布时间】:2017-09-16 02:10:21
【问题描述】:
假设我们有以下内容:
interface Container
package com.one
class ContainerImplOne extends Container
package com.two
class ContainerImplTwo extends Container
我们有许多继承自 Container 但驻留在不同包中的实现。如果我们有一个接受容器类型的函数:
def compute(c: Container): Unit
我们不知道传入的对象是来自包 com.one 还是 com.two。有没有办法限制计算函数从包二中获取容器实例?换句话说,有没有办法将类型限制为来自 com.Two.*?我们可以在 Java 或 Scala 中做到这一点吗?
【问题讨论】:
-
@DavisBroda 不,这不是同一个问题。这里的意义不是具体类型的名称,而是它们继承自同一个接口,函数采用接口的类型。但是这两种实现都是在不同的包中定义的。我将 impl 更新为具有不同的名称。
-
然后让它使用containerImplTwo,而不是container,你的问题就解决了。如果你只想要一个实现,那你为什么一开始就使用接口呢?
-
不,有很多 Container 类型的实现,它可以来自任何一个包。
-
如果是这种情况,请使用该信息更新问题。但是如果你可以编辑包二的源代码,我可能会有一个想法。
-
@DavisBroda 我们是第三方图书馆,所以我们不能。