2015-09-05 74 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; 
}