在Python中,我可以轻松创建包含各种类型值的列表,例如:
[0, 1.0, '2', MyClass(3)]
但是,在我熟悉的静态类型语言中,列表只能包含单个类型的值。例如,C ++的std::vector<T>
只能保存T
类型的值。 C#&#39; s List<T>
类似。
静态类型语言是否有可能支持异构列表?如果是这样,哪种语言有这种支持?
答案 0 :(得分: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);
}
}
输出:
class java.lang.Integer:10
class java.lang.Double:10.5
class java.lang.String:blahblah
class teststackoverflowquestion.MyClass:3
-------------
14个
答案 1 :(得分:0)
c ++有std :: tuple,但必须在编译时知道这些类型。
http://en.cppreference.com/w/cpp/utility/tuple
此外,您还可以拥有指向父类型的任何后代的指针/引用。
list {fordptr,chevyptr};