创建通用列表列表

时间:2012-12-06 23:55:48

标签: java generics vector project

如何创建通用列表列表?我有一个Boxcar类,它接受一个泛型参数和一个应该创建Boxcars列表的Train类。我们应该在一个单独的主类中指定Boxcar中的类型,所以在那之前boxcar必须保持通用。以下是我编写的代码。它编译但在调用load方法时在一个单独的驱动程序类中我得到错误The method load(capture#1-of ?) in the type Boxcar<capture#1-of ?> is not applicable for the arguments (Person)

package proj5;

 import java.util.ArrayList;
 import java.util.List;

public class Train {

private List<Boxcar<?>> train;
private int maxSpeed;
private int minSpeed;
private String position;
private int numBoxcars;
private int maxNumBoxcars;
private int speed;
private String destination;
private boolean stopped = true;

public Train(int maxSpeed, int minSpeed, int maxNumBoxcars, String position){
    train = new ArrayList<Boxcar<?>>();
    this.maxSpeed = maxSpeed;
    this.minSpeed = minSpeed;
    this.maxNumBoxcars = maxNumBoxcars;
    this.position = position;
}

public int getMaxNumBoxcars(){
    return maxNumBoxcars;
}

public int getSpeed(){
    return speed;
}

public String getPosition(){
    return position;
}

public int getMaxSpeed(){
    return maxSpeed;
}

public int getNumBoxcars(){
    return numBoxcars;
}

public List<Boxcar<?>> getTrain(){
    return train;
}

public void depart(String destination){
    this.destination = destination;
    speed = minSpeed;
    stopped = false;
}

public void arrive(){
    stopped = true;
    position = destination;
}

public void addCar(Boxcar<?> boxcar, int i){
    if(stopped){
        boxcar.setMaxItems(i);
        train.add(boxcar);
    }
}

public void removeCar(int i){
    if(stopped){
        train.remove(i);
    }
}

}

package proj5;

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;

public class Boxcar<T extends Comparable<T>> {

private List<T> boxcar;
private int maxItems;

public Boxcar(){
    boxcar = new ArrayList<T>();
}

public void load(T thing){
    if(!boxcar.contains(thing) && boxcar.size() < maxItems){
        boxcar.add(thing);
        Collections.sort(boxcar);
    }else{

    }
}

public int getMaxItems(){
    return maxItems;
}

public void setMaxItems(int i){
    maxItems = i;
}

public void unload(T thing){
    boxcar.remove(thing);
}

public List<T> getBoxcar(){
    return boxcar;
}

}

我希望这能更好地传达我想要实现的目标

3 个答案:

答案 0 :(得分:4)

BoxCar是一个通用类:

class BoxCar<T>{


}

训练课程有一个Boxcar列表:

class Train {
List<BoxCar<PassTheTypeHere>> = new ArrayList<BoxCar<PassTheTypeHere>>();

}

答案 1 :(得分:1)

创建通用列表时,您需要提供一个类型来代替T?。例如,包含字符串的Boxcars列表如下所示:

List<Boxcar<String>> train = new ArrayList<Boxcar<String>>();

?wildcard的示例,而T表示在List来源内引用的类型。如果没有对泛型的更深入理解,这一点可能很难理解,但我想确保完整地解决它。请查看this page,了解有关如何在代码中使用泛型的更多信息。

看看你修改过的问题,我会引导你到这行代码:

public class Boxcar<T extends Comparable<T>> {

然后就在它下面这一行:

private List<T> boxcar;

这意味着您传递给new Boxcar<type>()的任何类型都将被转移到内部列表(以及期望类型为T的对象的其他方法)。

答案 2 :(得分:0)

根据您原始问题的措辞,您似乎想要创建一个箱车列表。

以下是您需要做的所有事情。

private List<Boxcar> boxcarList = new ArrayList<Boxcar>();