2016-06-12 50 views
0

如果我有地图入境的..对象,我有一类数组阵列一般人

private Entry<K,V> array; 

我可以说

array = new Entry[someInt]; 

,我已经做了,或我需要像我的教练类型转换说是必要的,如

array = (Entry<K,V> E[]) new Entry[someInt]; 

注意,第一个没有工作,当我跑我的JUnits。

+0

你为什么会编辑回我做的代码格式更改?你的代码中有尖括号 –

+0

第一种解决方案是不好的做法,第二种有一个错字:array =(Entry [])new Entry [someInt];' –

回答

0

你有没有想过做一个List?

Entry<K,V> array = new ArrayList<Entry<K,V>>(); 
array.add(new HashMap<K,V>()); 
+0

我必须使用backingArray,但我只是想知道如果铸造真的有必要 – user3338275

+0

哦,陷阱。当使用Java集合框架类java ArrayList,LinkedList或HashSet等。它们接受一个类型为java.lang.Object的对象,它允许将任何对象插入到集合中。当我们从集合中检索Object时,它们的类型是java.lang.Object,它们需要分别进行强制转换以执行操作。我没有把你的整个代码放在我面前,所以我不能告诉你我们是否可以在没有得到类转换异常的情况下进行声明。 – John

+0

我们基本上实现了我们自己的hashMap。第一种方式让我没有例外,运行良好,但我的教授说这是一个问题。 – user3338275

0

你可以做任何一个。隐式转换原始类型允许不经过转换。

array = new Entry[someInt];将产生未经检查的转换警告。

array = (Entry<K,V>[])new Entry[someInt];将产生一个未经检查的投射警告。

因此,没有一个比另一个好。

请注意,如果您创建一个通配符类型的数组,你需要有一个转换:

array = (Entry<K,V>[])new Entry<?,?>[someInt]; // compiles 
array = new Entry<?,?>[someInt];    // doesn't compile