2016-06-23 7 views
0

は、私は簡単に例えば、様々なタイプの値を含むリストを作成することができます。:静的型言語は異種リストをサポートできますか? Pythonで

[0, 1.0, '2', MyClass(3)] 

しかし、私は精通しています静的型付け言語では、リストは単一型の値のみを含めることができます。たとえば、C++のstd::vector<T>は、タイプがTの値しか保持できません。 C#のList<T>も同様です。

静的型付き言語で異種リストをサポートすることは可能ですか?もしそうなら、どの言語がそのようなサポートを持っていますか?

+0

あなたは 'boost :: any'タイプのリストを持つことができます。 'any'はC++の標準として受け入れられていますが、実装が利用できるかどうかは分かりません。要素に何かを格納させるために、型消去と呼ばれる技法を使用します。これまでのところ私が知る限り、アイテムは事前定義されたインターフェイスに準拠している必要があります。または、使用する前にキャストする必要があります。 –

答えて

0

はい、JavaであなたはタイプObjectを使用してこれを行うことができますが、私にはそれがJavaのアンチパターンのような臭い、あなたはおそらくそれを行うべきではありません:P

package teststackoverflowquestion; 

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

public class TestStackOverflowQuestion { 

    public static void main(String[] args) { 
     List<Object> list = new ArrayList<>(); 
     list.add(10); 
     list.add(10.50); 
     list.add("blahblah"); 
     list.add(new MyClass(3)); 

     list.stream().forEach(o -> System.out.println(o.getClass() + " : " + o)); 
     System.out.println("-------------"); 
     list.stream().filter(o -> o.getClass().equals(Integer.class)) 
       .forEach(o -> System.out.println((int) o + 4)); 
    } 
} 

class MyClass { 
    int someField; 
    public MyClass(int someField) { 
     this.someField = someField; 
    } 

    @Override 
    public String toString() { 
     return Integer.toString(someField); 
    } 
} 

出力:

クラスjava.lang.Integerの:10
クラスjava.lang.Doubleの:10.5
クラスjava.lang.String:blahblああ
クラスteststackoverflowquestion.MyClass:3
-------------

+0

このリストの型を直接照会することはできますか? C++では、std :: tupleの型は明示的です。 – xaxxon

+0

私は実際にあなたがそれで何ができるかできないかはわかりません、私はそれを以前に使ったことはありません。それはJavaのアンチパターンのように臭いです。基本的に多態性を使用しているだけなので、コンパイル時に正確な型を知る必要はないと思います。これは 'Object'を型として使用しているので、' Object'で定義されたメソッドを呼ぶだけで済むと思います。それほどです(https://docs.oracle.com/javase/8/docs/api /java/lang/Object.html)。しかし、あなたはそのようなリストを作ることができます:P – Arjan

0

C++の型がコンパイル時に知られるように持っているものの、STD ::タプルを持っています時間。

http://en.cppreference.com/w/cpp/utility/tuple

また、あなたにも、親の型のいずれかの子孫へのポインタ/参照を持つことができます。

list {fordptr、chevyptr};

関連する問題