为什么我们不能在java中设置向量设置

时间:2015-08-04 15:12:24

标签: java vector hashmap set hashset

尝试将矢量转换为在java中设置。它引发了一个例外

  

无法转换为矢量来设置,而我们可以将矢量转换为列表。

3 个答案:

答案 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没有延伸SetSetList是两个不同的接口,都扩展了Collection

类比:Apple和Banana都继承自Fruit。 RedApple可以投射到Apple或Fruit,但不能投射到Banana。

你可以做一些相似的事情:

Set<Object> set = new HashSet<>(vector);