0
我在嘗試從對象轉換爲泛型時遇到了警告。 由於我的內部Node類的底層數據結構是一個數組,因此無法創建節點泛型,因爲我無法創建泛型數組,因此我的val
參數必須是對象。將對象投射到通用(或將內部類變量存儲爲通用)
是否有任何解決方法或更好的方法來做到這一點?我可以壓制警告,但我不確定這是否會引起我應該關注的後果。我也在製作不同的樹來實現MyTreeI,並且都會有不同的Node結構(所以我不能只做一個實際的Node類(甚至可以工作嗎?我也不知道))
防爆代碼在這裏:
public class MyTree<E> implements MyTreeI<E> {
private Node root; // root of tree
private static class Node {
private Object val;
private Node[] children = new Node[2];
}
public MyTree() {
}
@Override
public E get(String key) {
Node x = getNode(key); // helper function, assume it returns node in question
return (E) x.val;
}
}
爲什麼你不能讓節點使用'E'爲'val',和兒童'名單'的類型,而不是數組? –
我不能讓E的val類型,因爲我不能從靜態引用中引用非靜態類型...並且使它成爲List - 我有很多其他代碼已經利用了事實上它是一個數組 - 我可以將其全部更改爲使用列表,但是我更傾向於將它保持原樣並壓制警告,而不是重做所有代碼 - 或者這是一個壞主意? – gadu
Node類也必須是通用的:'私有靜態類節點',並且根的類型應該是'Node ',以及'x'。 'getNode()'應該返回'Node '等等。你當然可以使用一個數組,但是你會得到類型安全警告。 –