【发布时间】:2011-02-11 04:13:26
【问题描述】:
ZeroC Ice for Java translates 每个 Slice 接口 Simple (除其他外)一个代理接口 SimplePrx 和一个代理 SimplePrxHelper。如果我有一个ObjectPrx(所有代理的基本接口),我可以通过在SimplePrxHelper 上使用静态方法来检查它是否真的有接口Simple:
val obj : Ice.ObjectPrx = ...; // Get a proxy from somewhere...
val simple : SimplePrx = SimplePrxHelper.checkedCast(obj);
if (simple != null)
// Object supports the Simple interface...
else
// Object is not of type Simple...
我想写一个方法castTo,这样我就可以用
val simple = castTo[SimplePrx](obj)
或
val simple = castTo[SimplePrxHelper](obj)
就我所见,Scala 的类型系统表达能力不够强,无法让我定义castTo。这是正确的吗?
【问题讨论】:
-
为什么不只是
val simple = SimplePrxHelper.checkedCast(obj)?它几乎和你想要的一样短。否则,我不清楚 type 系统应该如何知道这个特定的库已经定义了名为FooPrx和FooPrxHelper的事物之间的关系,因为该库是以这种方式组织的并且不像Helper<FooPrx>那样“应该”。 -
因为我不太担心矮小而不是一般。例如,我不能在方法
foo[AProxyInterface]() : AProxyInterface中使用这样的强制转换。