Skip to content

Instantly share code, notes, and snippets.

@v6ak
Last active December 30, 2015 15:19
Show Gist options
  • Save v6ak/7847548 to your computer and use it in GitHub Desktop.
Save v6ak/7847548 to your computer and use it in GitHub Desktop.
// Some plain classes with subclasses
class Foo
class SubFoo extends Foo
class SubSubFoo extends SubFoo
class SubSubSubFoo extends SubSubFoo
// A generic class
class Bar[T <: Foo](val foo: T) {
}
object Main{
//def extractFoo(bar: Bar[_]): Foo = bar.foo // This does not compile
def extractFoo2(bar: Bar[_ <: Foo]): Foo = bar.foo // But this does.
// def extractAny(bar: Bar[_ <: Any]): Foo = bar.foo // This also does not compile.
}
package com.v6ak.experiments;
// Some plain classes with subclasses
class Foo{}
class SubFoo extends Foo{}
class SubSubFoo extends SubFoo{}
class SubSubSubFoo extends SubSubFoo{}
// A generic class
class Bar<T extends Foo>{
private final T foo;
public Bar(T foo) {
this.foo = foo;
}
public T getFoo() {
return foo;
}
}
public class Main {
// All of these methods work in Java:
public static Foo extractFoo(Bar<?> bar) {
return bar.getFoo();
}
public static Foo extractFoo2(Bar<? extends Foo> bar){
return bar.getFoo();
}
public static Foo extractAny(Bar<? extends Object> bar){
return bar.getFoo();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment