将String对象放入Integer型list引出的java类型擦出问题

在java里使用泛型声明1个Integer类型的list,一般情况下只能保存integer类型的对象。如果放入其它类型的对象则会报错。
其实,java的泛型只是伪泛型,即在编译前会做检查,编译后的字节码里不会保留泛型信息。

private static void foo() {
	List<String> list1 = new ArrayList<>();
	List<Integer> list2 = new ArrayList<>();
	System.out.println(list1.getClass());
	System.out.println(list1.getClass()==list2.getClass());
}

从上面的代码看到,2个不同类型的list的class都是java.util.ArrayList,不包含泛型信息。
由此想到,我们可以使用反射将一个不同类型的对象放入泛型集合里。

private static void addStringToIntList() {
	List<Integer> list = new ArrayList<>();
	list.add(1);
	list.add(2);
	System.out.println(list);
	String value = "abc";
	try {
		list.getClass().getMethod("add", new Class[]{Object.class}).invoke(list, value);
	}
	catch(Exception e) {
		e.printStackTrace();
	}
	System.out.println(list);
}

使用Eclipse Marketplace安装Maven插件

Maven是一个很好的项目管理工具。它的优点很多,比如可以简化依赖管理,不用手工逐个去获取、添加各种依赖包,而是在pom文件里添加几行配置就行。这样会节约大量时间和精力,因为我们依赖一个包,而这个包还可能依赖另外的包,以此类推,依赖的包会很多。如果采用最原始的方式,将这些包一一找到并添加到classpath下,这个工作会非常麻烦。幸好Maven帮我们把这些繁重的事情都做了。

过去我们在eclipse里添加maven插件,会通过菜单Help-Install New Software,指定maven插件的下载地址来进行安装。最新的eclipse推出了eclipse marketplace功能,其实就相当于apple的appstore,比以前安装插件的方式更方便了。试过以前2个maven插件地址,似乎都失效了,可能maven插件已经转移到eclipse marketplace里了吧。

下面介绍安装步骤:

1.安装Maven插件。

点击菜单Help——Eclipse Marketplace,在弹出对话框里find:右边的输入框输入“maven”,回车。在搜索结果里找到Maven Integration For Eclipse(Juno and newer),然后点击“Install”按钮。一路Next,接受安装协议,最后重启Eclipse。

2. 配置Maven插件。

点击菜单Window——Preferences,左边菜单找到Maven——Installations。我们看到右边显示已经安装了一个Embedded的Maven。我的电脑之前安装了一个Maven,我更喜欢用我安装的那个版本的Maven。这里点击右边的”Add”,添加之前已经安装好的Maven。

maven1

 

选择菜单Maven——User Settings,指定setting.xml文件的位置,以及本地Maven Repository的位置。

maven2

 

我们将一个Maven项目导入Eclipse中,选中项目名称,单击右键,Configure->Convert to Maven Project。再次选中项目,单击右键,这时右键菜单里会出现“Maven”选项。