【问题标题】:How to transfer bounded parameter using method super()如何使用方法 super() 传递有界参数
【发布时间】:2014-03-31 16:46:51
【问题描述】:

我有三个类:抽象 A 和两个扩展 A 的 B 和 C。

class A<T> {

   ArrayList<T> someField;

   A() {
      someField = new ArrayList<T>();
   }

   ArrayList<T> getSomeField() { return someField; }
}

现在我有 B 和 C

class B<T> extends A {

   B() {
      super();
   }
}

class C<T> extends A{

   C() {
      super();
   }
}

当我尝试使用与 B 和 C 不同类型的 getSomeField 时,我必须指定它是哪种类型。我的问题是如何将 T 参数从 B 类传输到 A 以避免指定 ArrayList 的类型,例如使用每个循环。如果有可能的话。

例子:

我希望:

B obj = new B<T>();
for (T item: B.getSomeField) {
    do something
}

我必须:

B obj = new B<T>();
for (T item: (ArrayList<T>)B.getSomefield) {
    do something
}

【问题讨论】:

  • 我没有看到 BCA 扩展,A 都不是抽象类。
  • 您的意思是class B&lt;T&gt; extends A&lt;T&gt;?否则,您将扩展原始类型。如果您能展示一个简短但完整的程序来演示问题,那将非常有帮助。

标签: java generics inheritance


【解决方案1】:

使用您的BC 定义,您正在扩展类A 的原始形式并创建每个类自己的T 泛型类型参数。 A 类的原始 for 意味着类型擦除发生在该类中的所有泛型上,并且强制转换变得必要。

您需要指定子类的T 与超类的T 相同:

class B<T> extends A<T> {

class C<T> extends A<T> {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    相关资源
    最近更新 更多