異なるデータ型の要素をJavaの単一のスタックに挿入するにはどうすればよいですか?要素のスタック
要素のスタック
答えて
genericsの目的を無効にするようだが、ここではそれが行く:
Stack<Object>s = new Stack<Object>();
s.add("hello");
s.add(1); // int is autoboxed to Integer
キャッチがStack
からObject
Sを取得するとき、どのような種類を見つけるためにいくつかの努力が必要になるだろうということになります各要素である - それはinstanceof
と型キャストを使用して必要になります。
while (!s.isEmpty()) {
Object e = s.pop();
if (e instanceof String)
System.out.println("String: " + (String)e);
else if (e instanceof Integer)
System.out.println("Integer: " + (Integer)e);
else
System.out.println("Other type: " + e);
}
そして今、我々は5日、ジェネリック医薬品の前に前のJavaの脆弱なコードに似た何かを言語に追加されたています。
一般的に、継承を使用してこれを解決する必要があります。おそらくマーカーインターフェイスを使用して:あなたは、単一のクラスでのインターフェイスの数に制限を実装することができ、あなたはどこにでもクラスhierchyで余分なインターフェイスを追加することができますので、
interface MyMarker
{
}
class Foo implements MyMarker
{
}
class Bar implements MyMarker
{
}
インタフェースは、このようなケースでは実用的です。あなたはその後、同じスタック内のFooとバーを置くことができ
は:
Stack<MyMarker> s = new Stack<MyMarker>();
s.add(new Foo());
s.add(new Bar());
これは、それがすべてで可能かどう移動するための方法です。それ以外の場合は、coobirdが示唆するようにしなければなりません。
これは間違いなく良い方法です - "instanceof"のif-elseifラダーがある場合、その解決策は通常継承されます。 – coobird
スタックの汎用引数は、すべての要素ランタイム型の共通のスーパータイプである必要があります。完全に異種のコレクションの場合、Object
はすべての参照タイプの共通のスーパータイプです。だから、:
Queue<Object> stack = Collections.asLifoQueue(new ArrayDeque<Object>());
stack.add("red");
stack.add(Color.GREEN);
stack.add(stack);
はもちろん、あなたがスタックからそれらの要素をポップに来たとき、あなたは(そしておそらくキャスト)適切なコードにルーティングするチェックinstanceof
を行う必要があります。
間接参照のレイヤーを導入する方がよいでしょう。オブジェクトをキューに直接置くのではなく、意味のあるオブジェクトにラップしてください。 instanceof
チェックはすべて、必要な操作を実行する(仮想)メソッドへの呼び出しで置き換えることができます。多形性がどのようになっているのか。
- 1. スタック上の要素の逆順
- 2. スタックされたHTML要素の順序
- 3. スタックの一番上の要素を複製します。Java
- 4. ベクトルの要素をC++のスタックにコピーする方法
- 5. オーバーレイ/カバー/スタックされた要素のJavascriptマウスイベント
- 6. C#削除可能要素を持つスタック
- 7. スタックは同じ要素をポップし続けます
- 8. jQueryカスタムフィルタの問題:要素のスタックがあまりにも多い
- 9. Fisher-Yatesのシャッフル時にJavaスタックに残っている要素は?
- 10. アセンブリのスタックとスタックのスタック?
- 11. 純粋なCSSを使用してオーバーラップ要素をスタックできますか?
- 12. ユーザーインターフェイス上の要素の要素
- 13. CSSスタイル要素が要素
- 14. Monad:[UI要素] vs [要素]
- 15. XML要素木のpython要素/タグ
- 16. ターゲット要素のクリック、子要素、親が
- 17. jquery要素コレクションのswitch要素位置
- 18. jquery mobile - フォーム要素の内部要素
- 19. 要素の検出とイベントオーバー要素
- 20. 他の要素の子要素の下に要素を描画します
- 21. 要素は要素が異なる親要素
- 22. 子要素のデータを親要素の子要素から取得する
- 23. リビングウェブページの要素
- 24. jQueryの - 要素
- 25. jQueryの要素
- 26. webdriverを要素から要素が
- 27. クラス要素をインタフェース要素に変更
- 28. jQuery UI要素とDojo(Dijit)フォーム要素
- 29. Fortran要素関数と要素サブルーチン
- 30. 要素
危険性は、後でアイテムを取得するときに、オブジェクトタイプのチェックを書く必要があります。 – Joset
絶対に - 私はちょうど編集としてその部分を追加し終えました。 – coobird