【发布时间】:2015-03-22 20:52:46
【问题描述】:
在 Scala 中,我想为使用泛型的 trait 中定义的方法返回一个类的实例,我的代码示例是这样的:
文件 1
package packOne
import packTwo.A
trait MyTrait[T <: MyTrait[T <: A]] {
def otherFunct(): String
def funct[T <: A](): T
}
文件 2
package packTwo
import packOne.MyTrait
abstract class A(someParameter: String) {}
class B(someParameter: String) extends A(someParameter) {}
object B extends MyTrait[B] { // <--- the B inside MyTrait here is the class not the object, or at least that is what I want
def otherFunct(): String = "Hello"
def funct[B](): C = new B("hi") // <--- I think here is the key
}
基本上我想要的是一个接口,该接口具有在实现对象中返回类A的具体实现的方法(它恰好是扩展A的类的伴随对象)。
为什么我希望它出现在对象上?,是因为我想在不需要实例的情况下调用该方法(如 java 中的静态方法),这样我就可以调用B.funct() 并有一个类似于 工厂方法 的 B 类实例,对于扩展 A 的其他类,例如对 X.funct 的调用将返回类 X 的实例。
我试图从函数定义中删除泛型类型,除了函数的返回类型,并将其留在特征定义中(如def funct(): T),但这也不起作用。
我对 Scala 很陌生,所以如果你能解释一下,避免复杂的 scala 独特 概念,我将不胜感激
【问题讨论】: