【问题标题】:method adding objects extending abstract class to Arraylist of type Abstract Class in java方法将扩展抽象类的对象添加到java中抽象类类型的Arraylist
【发布时间】:2016-06-28 04:11:36
【问题描述】:

我在创建一种方法以将扩展抽象类 (Ant_Abstract) 的对象添加到扩展 Ant_Abstract 的类型对象的 ArrayList 时遇到了一些麻烦。到目前为止,我有两种蚂蚁,Scouts 和 Workers(都扩展了 Ant_Abstract),我想使用 ArrayList 在 Anthill 文件中包含这两种蚂蚁。

当我尝试编译时:

import java.util.*;
class Anthill{
     public ArrayList<? extends Ant_Abstract> occupants=new ArrayList(15);
     Anthill(){
     }
     public<t extends Ant_Abstract> void enter(Class<t> ant){
            occupants.add(ant);
     }
}

它给了我错误:“ArrayList 类型中的方法 add(capture#1-of ? extends Ant_Abstract) 不适用于参数(类)

请帮忙。

【问题讨论】:

  • 您尝试存储 Class 而不是 t,顺便说一句,通用占位符使用大写

标签: java arraylist abstract-class


【解决方案1】:

为了将“T”用作泛型类型,您需要在类声明中指出这一点。然后在您的类Anthill 的属性和方法中,您可以在整个过程中引用它:

public class Anthill<T extends Ant_Abstract>{
     public ArrayList<T> occupants = new ArrayList<>(15);

     public void enter(T ant){
            occupants.add(ant);
     }
}

您需要将 ArrayList 的声明更改为:

     public ArrayList<T> occupants = new ArrayList<>(15);

Class&lt;T&gt; 更改为 T

您没有尝试添加类(它本身就是一个对象类型)。 您的意图是添加 Abstract_Ant 实现的实例,而不是 Class 本身。

花点时间阅读Java Generics Lesson

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多