请教关于JAVA不用方法重载处理java foreach时List和数组的问题

yshumk 发布于 2015/08/07 20:22
阅读 239
收藏 0

刚刚想处理一个小问题,想要写一个方法,里面用到了foreach语句,而为了节省一些资源(会么?),所以传入的参数类型可以不是List<String>的话,尽量想使用String[],最自然的话就是用方法重载了,类似于:

public static void main(String[] args) {
		String[] stringArray = { "x", "y" };
		getTrStr(stringArray);
		List<String> stringList = new ArrayList<String>(Arrays.asList("xxx", "yyy"));
		getTrStr(stringList);
	}

	public static String getTrStr(List<String> titles) {
		String s = "";
		for (String title : titles) {
			s += title;
		}
		return s;
	}
	
	public static String getTrStr(String[] titles) {
		String s = "";
		for (String title : titles) {
			s += title;
		}
		return s;
	}



但是其实两份代码是一样的,感觉略蛋疼。。。想要改成用一个方法就搞定了,想了一下弄成 类似于:

public static void main(String[] args)  {
		String[] stringArray = { "x", "y" };
		getTrStr(stringArray);
		List<String> stringList = new ArrayList<String>(Arrays.asList("xxx", "yyy"));
		getTrStr(stringList);
	}

	@SuppressWarnings("unchecked")
	public static String getTrStr(Object titles) {
		String s ="";
		if (titles instanceof String[]) {
			for (String title : (String[]) titles) {
				s += title;
			}
		} else if (titles instanceof Iterable<?>) {
			for (String title : (Iterable<String>) titles) {
				s += title;
			}
		}
		else {
			s = "WTF";
		}
		return s;
	}



这样写感觉特别别扭,还不如方法重载呢~但是String[](getClass()了一下好像是 [Ljava.lang.String,查了下好像只能是用Obejct)和List<String>我想不到一个共同的父类、且都能直接foreach而不用判断类型、强制转换。。。

对JAVA了解还太肤浅,请问有没有一种在方法的参数里面,同时提供两个类型选择的写法呢?

加载中
0
纠结名字
public static String getTrStr(Collection<String> titles) {
    return getTrStr(titles.toArray());
}
 
public static String getTrStr(String[] titles) {
    String s = "";
    for (String title : titles) {
        s += title;
    }
    return s;
}

如果你真的想省事,看看你的IDE在你输入StringUtils时是否能带出join方法,如果能,或许你就能更简单实现你要的效果了。


yshumk
yshumk
感谢赐教。啊,这个问题好蛋疼啊,本来是为了用Array感觉比List省点点资源的,结果这样弄起来好像转来转去还不如不弄了。。
返回顶部
顶部