【问题标题】:Java List with generics of Classes that implements an interface具有实现接口的类的泛型的 Java 列表
【发布时间】:2014-04-11 14:19:31
【问题描述】:

我有多个类,它们之间非常不同,所以我不能从一个通用父类扩展所有类,除了 Object

其中一些类实现了一个名为 "Searchable" 的接口,其他类则没有

我有一个扩展 ArrayList 的类

public class ItemList<Object> extends ArrayList<Object>

这个列表的通用对象允许我将这个列表用于我的所有课程

现在,对于实现该接口的唯一类,我想要扩展 ItemList ,将其称为“SearchList”,它允许我使用接口的方法进行一些操作 如果 Searchable 的一种方法是“search(int x)”,我想要一个像这样的“SearchList”中的方法

public int count(int x){
int ret=0;
       for(int i=0;i<this.size();i++{
            ret=ret+this.get(i).search(x);
        }
return ret;
}

我怎么能做这样的事情?因为我知道我不能使用泛型

感谢您的帮助:)

【问题讨论】:

  • SomeClass&lt;Object&gt; extends ArrayList&lt;Object&gt; 是多余的 imo
  • 请不要将您的类型参数命名为“Object”

标签: java list generics


【解决方案1】:

如果一些您的元素实现了Searchable 接口,那么您可以使用instanceof 运算符对其进行测试。

for(Object o : this) {
    if(o instanceof Searchable) {
        Searchable s = (Searchable)o;

        // Do what you need to with it.
    }
}

注意:我不建议将 ArrayList 扩展用于此类用途。构图更适合这一点。

【讨论】:

    【解决方案2】:

    如果你想要一个只包含 Searchable 对象的列表,你可以这样做:

    public class SearchList<Searchable> extends ItemList<Object>
    

    【讨论】:

      【解决方案3】:

      所以你想让SearchList 扩展ItemList,但只接受扩展Searchable 的类型参数?

      public class SearchList<T extends Searchable> extends ItemList<T>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-27
        相关资源
        最近更新 更多