【问题标题】:Java generics super usage [duplicate]Java泛型超级用法[重复]
【发布时间】:2014-04-20 11:44:47
【问题描述】:

我试图了解为什么以下内容无法编译。

public class AnimalHolder<T super Animal> {
        T animal;
        public static void main(String[] args) {
                AnimalHolder<Object> objectHolder = new AnimalHolder<Object>();

        }
}

据我了解,我可以使用 IS A AnimalAnimal 的超类型(在本例中为 Object)。谁能解释一下?

编译器消息:

AnimalHolder.java:15: error: > expected
public class AnimalHolder<T super Animal> {
                           ^
AnimalHolder.java:15: error: <identifier> expected
public class AnimalHolder<T super Animal> {
                                        ^
AnimalHolder.java:17: error: illegal start of expression
        public static void main(String[] args) {
        ^
AnimalHolder.java:17: error: illegal start of expression
        public static void main(String[] args) {
               ^
AnimalHolder.java:17: error: ';' expected
        public static void main(String[] args) {
                     ^
AnimalHolder.java:17: error: '.class' expected
        public static void main(String[] args) {
                                         ^
AnimalHolder.java:17: error: ';' expected
        public static void main(String[] args) {
                                             ^
AnimalHolder.java:21: error: reached end of file while parsing
}
 ^
8 errors

【问题讨论】:

标签: java generics


【解决方案1】:

问题是您不能为泛型参数指定 下限

public class AnimalHolder<T super Animal> { // Can't do this

你只能指定一个上限

public class AnimalHolder<T extends Animal> { // Must use "extends"

【讨论】:

  • 说实话,我没看懂两者的区别。这就是我发布这个问题的原因。
  • T super X 不是很有用。你可以肯定地说 T 是Object,它什么也没告诉你。阅读重复的问题以了解更多信息。
猜你喜欢
  • 2018-04-10
  • 2010-10-10
  • 2013-04-02
  • 2022-08-14
  • 2018-11-20
  • 1970-01-01
  • 2013-09-28
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多