Ed Staub
Ed Staub

Reputation: 15690

What is the Java-compatibile equivalent in Scala for <? extends Foo>

I have a java class "JavaClass" with a method:

boolean addAll(java.util.Collection<? extends java.lang.Integer> collection) { ... }

I need to create a Scala trait MyTrait that includes this method without an implementation, something like

def addAll[A<:java.lang.Integer](coll: java.util.Collection[A]) : Boolean

so that an implementation

class MyClass extends JavaClass with MyTrait

would not be abstract. But I can't figure out any way to match the Java signature in Trait.

FWIW... I'm trying to write some high-performance Scala-collection-compatible wrappers for Trove, which avoids generics to provide high performance with primitives, but used highly consistent interfaces for each primitive type. I've found that in general, traits work well to model the type-independent demi-interfaces, but I can't figure out how to express this particular signature - even ignoring, for the moment, the type-abstraction I'm using the trait for.

Upvotes: 0

Views: 296

Answers (1)

maks
maks

Reputation: 6006

Collection<? extends java.lang.Integer> in java is equivalent to

Collection[T] forSome {type T <: java.lang.Integer}

or using placeholder syntax Collection[_ <: java.lang.Integer] in scala

Upvotes: 3

Related Questions