尝试将矢量转换为在java中设置。它引发了一个例外
无法转换为矢量来设置,而我们可以将矢量转换为列表。
答案 0 :(得分:2)
您只能转换为超类型或子类型。例如,您可以从Number
投射到Integer
或从Integer
投射到Number
,但是您无法将Vector
投射到Set
1}}。
您可以将Vector
转换为Set
,如下所示:
Set<Integer> set = new HashSet<Integer>(vector);
请注意,无论如何,您应该使用ArrayList
而不是Vector
。
答案 1 :(得分:2)
投射作品垂直,而不是水平。在其他蠕虫中,可以将引用转换为其超类型或子类型,例如
A
|
+--+--+
| |
B B2
|
C
class A{}
class B extends A{}
class C extends B{}
class B2 extends A{
void foo(){}
}
你有
B b = new C();
大于
C c = (C)b;//fine since b really holds C instance
A a = (A)b;//also OK since A interface is guaranteed to have proper implementation
//inherited by B type (or even its subtype)
但
B2 b2=(B2)b;//will not compile because there is a chance that object stored in
//b will not provide implementation of interface of B2 type
//like `foo` method
因为Set
不是Vector
的超级或子类型,所以你不能使用强制转换。
答案 2 :(得分:1)
因为Vector
没有延伸Set
。 Set
和List
是两个不同的接口,都扩展了Collection
。
类比:Apple和Banana都继承自Fruit。 RedApple可以投射到Apple或Fruit,但不能投射到Banana。
你可以做一些相似的事情:
Set<Object> set = new HashSet<>(vector);