我试图在scala中创建一堆子类的数组,问题是超类是一个自我限制的泛型,即(显然是为了容纳lombok所以这不是我可以改变的东西)
abstract public SomeClass<T extends SomeClass>{}
在Scala中
val subClasses:Seq[_ <: SomeClass] = seq(sub1, sub2, ..., subN)
我得到的错误&#34; SomeClass采用类型参数&#34;似乎表明我需要
Seq[_ <: SomeClass[_ <: SomeClass[_ <: SomeClass ...
经过相当多的谷歌搜索后,我仍然没有找到一个很好的解决方案,此时我不知道该搜索什么。非常感谢任何帮助。
答案 0 :(得分:1)
自我引用类型在scala中称为F-bounded polymorphism。要创建您在示例中描述的Seq,类型将为:
>>> data = numpy.random.normal(loc = 0.0, scale = 1.0, size = 1000)
>>> from sklearn.mixture import DPGMM
>>> d = DPGMM(n_components=5)
>>> d.fit(data.reshape(-1,1))
DPGMM(alpha=1.0, covariance_type='diag', init_params='wmc', min_covar=None,
n_components=5, n_iter=10, params='wmc', random_state=None, thresh=None,
tol=0.001, verbose=0)
>>> d.n_components
5
>>> d.means_
array([[-0.02283383],
[ 0.06259168],
[ 0.00390097],
[ 0.02934676],
[-0.05533165]])
请注意,此类型特定于其中的项目列表,您可以创建一个包含Seq[SomeClass[_ >: subN with sub2 with sub1 <: SomeClass[_ >: subN with sub2 with sub1 <: Object]]]
的所有子类型的类型,但这会让您感到痛苦。