1

汎用リストのリストを作成するにはどうすればよいですか? 一般的な引数を取る Boxcar クラスと、Boxcar のリストを作成する Train クラスがあります。別のメイン クラスで Boxcar に含まれる型を指定することになっているため、それまでは boxcar はジェネリックのままにする必要があります。以下は私が書いたコードです。それはコンパイルされますが、ロードメソッドを呼び出すときに別のドライバークラスでエラーが発生します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;
}

}

これが私が達成しようとしていることをよりよく伝えることを願っています

4

3 に答える 3

4

ジェネリック クラスである BoxCar:

class BoxCar<T>{


}

Boxcar のリストを持つ列車クラス:

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

}
于 2012-12-07T00:01:07.420 に答える
1

ジェネリックリストを作成するときに、その代わりにタイプを指定する必要がありますT?たとえば、文字列を含むボックスカーのリストは次のようになります。

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

ワイルドカード?の例ですが、aはのソース内で参照される型を表します。その点は、ジェネリックスを深く理解していなければ理解するのが難しいかもしれませんが、完全を期すために必ず対処したいと思いました。コード内でジェネリックスを使用する方法の詳細については、このページをご覧ください。TList

改訂された質問を見て、次のコード行に移動します。

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

そしてそのすぐ下にこの線があります:

private List<T> boxcar;

これは、渡した型がすべてnew Boxcar<type>()内部リスト(および型のオブジェクトを期待する他のメソッド)に引き継がれることを意味しますT

于 2012-12-06T23:58:19.187 に答える
0

元の質問の文言に基づいて、有蓋車のリストを作成したいようです。

以下は、あなたがする必要があるすべてです。

private List<Boxcar> boxcarList = new ArrayList<Boxcar>(); 
于 2012-12-07T00:06:49.107 に答える