关于java泛型的疑惑_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 关于java泛型的疑惑

关于java泛型的疑惑

 2013/10/26 21:44:45  forenroll  程序员俱乐部  我要评论(0)
  • 摘要:今天看了一下java的泛型,在网上找到一片文章:java泛型深入http://www.blogjava.net/fancydeepin/archive/2012/08/25/386241.html文章作者fancydeepin。fancydeepin在文中说,“运行期间泛型并不存在,它在编译完成之后就已经被擦除了。”,并都给出了例子。但是我试验过后发现泛型并没有在编译完成之后就被擦除。试验环境:CentOS6.2,OracleJDK1.7.0_40,JD-GUI0.3.5下面是我的试验代码
  • 标签:Java 泛型

今天看了一下java的泛型,在网上找到一片文章:

java 泛型 深入

http://www.blogjava.net/fancydeepin/archive/2012/08/25/386241.html

文章作者fancydeepin。

fancydeepin在文中说,“运行期间泛型并不存在,它在编译完成之后就已经被擦除了。”,并都给出了例子

但是我试验过后发现泛型并没有在编译完成之后就被擦除。

试验环境:CentOS6.2,Oracle JDK 1.7.0_40,JD-GUI0.3.5

下面是我的试验代码(根据fancydeepin的修改的):

class="java" name="code">package forenroll;

import java.util.ArrayList;
import java.util.List;

public class Test {

	List<Integer> interview = new ArrayList<Integer>();
	public void test(List<String> list){
		List<String>    list1 = new ArrayList<String>();
        List<Integer> list2 = new ArrayList<Integer>();
        System.out.println(list1.getClass() == list2.getClass()); // 输出结果: true
        System.out.println(list1.getClass() == interview.getClass()); // 输出结果: true
        System.out.println(list1.getClass().getName()); // 输出结果: java.util.ArrayList
        System.out.println(list2.getClass().getName()); // 输出结果: java.util.ArrayList
	}
	public static void main(String[] args) {

		List<String>    list1 = new ArrayList<String>();
        List<Integer> list2 = new ArrayList<Integer>();
        Test test = new Test(); 
        test.test(list1);

	}

}

?运行结果:

true
true
java.util.ArrayList
java.util.ArrayList

?

?

JDK自带的javap命令反编译的结果:

[forenroll@forenroll forenroll]$ javap Test
Warning: Binary file Test contains forenroll.Test
Compiled from "Test.java"
public class forenroll.Test {
  java.util.List<java.lang.Integer> interview;
  public forenroll.Test();
  public void test(java.util.List<java.lang.String>);
  public static void main(java.lang.String[]);
}

?main方法里面的两句代码不知道为什么没有反编译出来。但是我用jd-gui这个工具反编译出来的结果里面是有的,jd-gui反编译结果如下:

package forenroll;

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;

public class Test
{
  List<Integer> interview = new ArrayList();

  public void test(List<String> list) { List list1 = new ArrayList();
    List list2 = new ArrayList();
    System.out.println(list1.getClass() == list2.getClass());
    System.out.println(list1.getClass() == this.interview.getClass());
    System.out.println(list1.getClass().getName());
    System.out.println(list2.getClass().getName()); }

  public static void main(String[] args)
  {
    List list1 = new ArrayList();
    List list2 = new ArrayList();
    Test test = new Test();
    test.test(list1);
  }
}

?

?

? ? ? ?根据通过javap命令和jd-gui工具之间的反编译结果,fancydeepin的通过反编译的结果来说泛型在编译后被擦出了,这个说法不太妥。

? ? ? ?但是那两个类型比较的结果又是ture,这个有点不理解了。不知有没有高手出来释疑解惑一下?

?

?

?

上一篇: 关于java泛型的疑惑,大家一起讨论一下 下一篇: 没有下一篇了!
发表评论
用户名: 匿名