-1

こんにちはみんな私は安全でないキャスト操作で問題が発生しました。ここに問題があります。さまざまなタイプの注文(PlayList、UserOperationsなど)を受け入れるか、または受け入れる必要があるコンストラクターを取得する必要があります。そこで、オブジェクトとしてパラメータを指定し、一度呼び出された受信のタイプを確認することにしました。問題の1つは、パラメーター化されたArrayList(ArrayList <PlayList>)であり、パラメーター化されたArrayListをチェックできないため、「掘り下げる」必要があります。最初のステップで、それがArrayListであるかどうかをチェックし、次に、コンテンツの種類を確認します。その後の問題は、安全でないキャストの警告が表示されることですが、それをどのように処理するかはまだわかりません。

ご挨拶

    public Order(int aTyp, Object aOrderContent) {
    this.orderTyp = aTyp;
    if (aOrderContent instanceof ArrayList< ? >) {
        ArrayList<?> objList = (ArrayList< ? >)aOrderContent;
    if (objList.get(0) != null && (objList.get(0)) instanceof PlayList) {
        playList.addAll((ArrayList<PlayList>)aOrderContent) ;
    }        

    } else if (aOrderContent instanceof UserOP) {

    }
}
4

2 に答える 2

2

デザインを再考してください。コンストラクタに . を取らせないでくださいObject。これは不透明すぎて、コードの消費者が任意の型を渡すことができます。代わりにジェネリック クラスを使用する必要があるようです(ただし、部分的な例に基づいて判断するのは困難です)。考えられる解決策:

// Might need an upper bound on T if you want to limit the allowed parameterizations
class Order<T> {

    private final int orderTyp;
    private final List<T> someList = new ArrayList<>();

    public Order(int aTyp, List<t> aOrderContent) {
        this.orderTyp = aTyp;
        someList.addAll(aOrderContent);
    }
}

(コンパイル時に) 可能な型の値がすべてわかっている場合は、 の代わりにを使用するenum方がよい場合があることに注意してください。intorderTyp


補足: aListが空の場合、 return ではなくList#get(0)、例外をスローしますnull

于 2012-11-21T18:07:14.573 に答える
0

コンストラクターに Object オーバーロードを取得させる代わりに、コンストラクターをオーバーロードします。1 つのテイクList<?>と 1 つのUserOPect を取る。Listまた、同じインターフェイスから拡張されたList<MyInterface>すべてのオプションが理想的です。List<?>

于 2012-11-21T18:06:34.040 に答える