Параметр вложенного типа Java Upcasting

Учитывая код Java ниже, я хочу знать, почему апкастинг Foo<String> в Foo<object> не работает? По сути, я хочу сказать Java, что если T это подкласс S, затем Foo<T> это подкласс Foo<S>, Я знаю, что есть способ сделать это в Scala, но есть ли способ сделать это в Java? Если нет, есть ли обходной путь, чтобы получить приведенный ниже код для компиляции?

class Foo<T> {
    T t;
    public Foo(T t) {
        this.t = t;
    }
}

class Main {
    public static Foo<object> getFoo() {
        Foo<String> foo = new Foo("foo");
        return foo; // this throws a compile time exception
    }
}

1 ответ

Есть две проблемы,

  1. Foo(T obj) {
  2. Foo<Object> foo....

Приведенный ниже код работает нормально.

class Foo<T> {
    T obj;
    Foo(T obj) {
        this.obj = obj;
    }
}

class Main {
    public static Foo<Object> getFoo() {
        Foo<Object> foo = new Foo("foo");
        return foo;
    }
}
Другие вопросы по тегам