如何创建通用列表列表?我有一个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;
}
}
我希望这能更好地传达我想要实现的目标
答案 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>();