数组初始化小工具
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函数。
总之,功能是实现了的。让效率见鬼去吧。
呐,在这个问题上,我正试图用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函数。
总之,功能是实现了的。让效率见鬼去吧。
相关文章推荐
- [BZOJ1597][Usaco2008 Mar]土地购买(斜率优化dp)
- mysql相似于oracle的to_char() to_date()方法
- 模拟大数据的基本计算, 以解决常规计算器计算数据时位数的有限性
- UVA10723 Cyborg genes (LCS)
- UVa 101 - The Blocks Problem
- java显示声音波形图示例
- 123
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 链表中环的入口结点
- linux jps: command not found
- [设计模式学以致用]备忘录模式
- Qt文件读写操作
- strtok() 用于分割字符串
- 使用IPtables 实现数据转发
- php安装
- 简单的cc攻击防御
- 【MongoDB】常用知识点
- python自底向上的执行单元测试
- Fragment 内实现对返回键的监听处理
- System and Device Programming------Kernel