您的位置:首页 > 其它

数组初始化小工具

2016-04-25 18:28 645 查看
前言:

呐,在这个问题上,我正试图用StringBuilder存放内容。这些内容来自一个List。在遍历List时,根据内容中的标识而分别放置在不同的StringBuider中,这其实从头到尾都是一件非常容易的事情。

但是容易的事情会让代码看起来非常糟糕。

为了避免空指针异常,我必须在append之前确认一下StringBuilder是否已经存在了,或者用另一种方式的话,我必须在"new"的代码行下面使用for循环为它初始化。

尽管我知道这并不难,也不会造成更多的复杂性,然而强迫症表示这么简单的功能怎么可以用两行甚至更多行来完成?!

以下是代码:

/**
* 数组工具类
*/
@SuppressWarnings("serial")
public class ArrayUtils implements java.io.Serializable {

/**
* 初始化一个数组
* @param t 数组
* @param param 调用的构造方法参数
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static<T> T[] init(T[] t, Object...param) {
Class c = t.getClass().getComponentType();
Constructor constructor = null;
for(Constructor con : c.getConstructors()) {
try {
// 如果可以接受,就采用
con.newInstance(param);
constructor = con;
break;
} catch(Exception e) {
continue;
}
}
try {
for(int i=0; i<t.length; i++) {
//t[i] = (T) c.newInstance();
t[i] = (T) constructor.newInstance(param);
}
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
return t;
}

/**
* 获得一个已经初始化过的数组
* @param componentType 数组得构成元素类型
* @param length 数组长度
* @param param 调用的构造方法参数
* @return
*/
@SuppressWarnings("unchecked")
public static<T> T[] newArray(Class<T> componentType, int length, Object...param) {
return ArrayUtils.init((T[]) Array.newInstance(componentType, length), param);
}

public static void main(String[] args) throws Exception {
System.out.println(ArrayUtils.newArray(Integer.class, 10, 5)[0]);
}
}

如果想要使用它的话,请参考最下方的main函数。

总之,功能是实现了的。让效率见鬼去吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: