【发布时间】:2018-08-17 15:28:35
【问题描述】:
有没有办法在 scala 中“编程到接口”?
我是 Scala 的新手。我在 scala 中有一个“特征”,并且许多类都扩展了该特征。我正在寻找一种如何使用接口而不是直接使用类的方法。
目前,我正在做:
val clazz = new MyClass()
MyClass 是从 trait 扩展而来的。
我正在寻找一种将接口作为实例从工厂方法返回以生成类的方法。有什么办法吗?
【问题讨论】:
-
Scala 中的扩展转换就像在 Java 中一样。如果
MyClass实现了一个特征Foobar并且你的方法有返回类型Foobar,你可以返回clazz就好了。 -
调用
asInstanceOf[MyClass]破坏了类型安全并破坏了“程序到接口”的目的 -
您的问题不清楚。您正在谈论“编程到接口”,但在您的示例中,您使用
asInstanceOf将值转换为具体的子类类型,这与编程到接口完全相反。跨度> -
另外,不清楚您所说的“我正在寻找一种方法将接口作为实例从工厂方法返回以生成类”。您只能从方法中返回对象。但是特征不是对象,因此您不能从工厂方法返回特征。 (好吧,您可以使用 Scala 反射 API 获取特征的反射代理并返回 that ...)