spark-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sean Owen <>
Subject Re: Model abstract class in spark ml
Date Tue, 30 Aug 2016 21:08:50 GMT
I think it's imitating, for example, how Enum is delcared in Java:

abstract class Enum<E extends Enum<E>>

this is done so that Enum can refer to the actual type of the derived
enum class when declaring things like public final int compareTo(E o)
to implement Comparable<E>. The type is redundant in a sense, because
you effectively have MyEnum extending Enum<MyEnum>.

Java allows this self-referential definition. However Scala has
"this.type" for this purpose and (unless I'm about to learn something
deeper about Scala) it would have been the better way to express this
so that Model methods can for example state that copy() returns a
Model of the same concrete type.

I don't know if it can be changed now without breaking compatibility
but you're welcome to give it a shot with MiMa to see. It does
compile, using this.type.

On Tue, Aug 30, 2016 at 9:47 PM, Mohit Jaggi <> wrote:
> Folks,
> I am having a bit of trouble understanding the following:
> abstract class Model[M <: Model[M]]
> Why is M <: Model[M]?
> Cheers,
> Mohit.

To unsubscribe e-mail:

View raw message