2015-09-05 76 views
1

創建陣列:轉換陣列具有兩個類型的HashMap,TreeMap中,LinkedHashMap的

{INT,字符串},{字符串,字符串},{INT,長},{字符串,布爾},{字符串,雙} {INT,類汽車},{串級轎車}

轉換成的HashMap,TreeMap的,LinkedHashMap的

這是Car類:

public class Car implements Comparable{ 

    int id; 
    String car_name; 
    String number; 

    public Car(int id, String car_name, String number) { 
     this.id = id; 
     this.car_name = car_name; 
     this.number = number; 
    } 

    @Override 
    public String toString() { 
     return "Car{" + 
       "id='" + id + '\'' + 
       ", car_name='" + car_name + '\'' + 
       ", number='" + number + '\'' + 
       '}'; 
    } 
} 

有我的代碼:

public class Main { 

    private static HashMap<Integer,String> toHM(Object[][] a){ 
     HashMap<Integer,String> h = new HashMap<>(); 

     for (Object[] o : a){ 
      h.put((Integer) o[0], (String) o[1]); 
     } 
     return h; 
    } 

    private static HashMap<Integer,String> toLHM(Object[][] a){ 
     HashMap<Integer,String> h = new LinkedHashMap<>(); 

     for (Object[] o : a){ 
      h.put((Integer) o[0], (String) o[1]); 
     } 
     return h; 
    } 

    private static TreeMap<Integer,String> toTM(Object[][] a){ 
     TreeMap<Integer,String> h = new TreeMap<>(); 

     for (Object[] o : a){ 
      h.put((Integer) o[0], (String) o[1]); 
     } 
     return h; 
    } 



    public static void main(String[] args) { 

     Object[][] a = new Object[2][2]; 
     a[0][0] = 1; 
     a[0][1] = "test"; 
     a[1][0] = 2; 
     a[1][1] = "other test"; 

     HashMap<Integer,String> aHM = toHM(a); 
     HashMap<Integer,String> aLHH = toLHM(a); 
     TreeMap<Integer,String> aTM = toTM(a); 

    } 
} 

這是代碼正確的? 5月,最好不要在代碼中使用泛型? 我知道如何解決這個問題嗎?

+0

您不能只將對象轉換爲字符串或整數。而是重寫你的方法來獲取不同的數組,或者在它們中包含一個instanceof if語句。 – TungstenX

回答

1

檢查:

@SuppressWarnings("unchecked") 
public static <S, T1, T2> S convert(Object[] inputobject, Class<S> mapType, 
     Class<T1> keyType, Class<T2> valueType) 
     throws IllegalAccessException, InstantiationException { 
    Map<T1, T2> map = (Map<T1, T2>) mapType.newInstance(); 
    map.put((T1) inputobject[0], (T2) inputobject[1]); 
    return (S) map; 
} 
  • inputObject:對象數組
  • mapType:例如,哈希圖,樹形圖等
  • keyType:密鑰的類例如。字符串,整數等
  • VALUETYPE:價值類

樣品輸入:

Object[] obj = new Object[] { 1, "test" }; 
System.out.println(convert(obj, HashMap.class, Integer.class, String.class)); 

樣本輸出:

{1=test} 

我希望這會工作。

0
  1. 按照標準,你應該總是編碼到一個接口。我的意思是參考應該是一個接口,對象應該是實現。
  2. 正如我看到你在所有的三種方法都有相同的身體,我不能有一個返回地圖的方法。您可以添加一個參數並將其分配給參考。
  3. 他調用函數可以捕獲所需的返回類型。

下面是你的幫助

例如一個僞代碼。

調用函數:

HashMap hMap = getMap(Object[][] a, HashMap.class); 

方法簽名:

private <R> R (Object[][] a,Class<R> responseClazz){ 
    Map mp = new responseClazz(); 
    ..... 
    return mp; 
}