java 擦除,

  java 擦除,

  背景:我们都知道泛型本质上是提供类型的‘类型参数’,也叫参数化类型或者参数多态。实际上,泛型的思想并不是由Java首先引入的,C中的模板就是使用泛型的一个例子。

   (推荐视频:java视频教程

  GJ(Generic Java)是Java语言的扩展,是一种参数化类型的Java语言。用GJ编写的程序看起来基本上和普通的Java程序一样,除了参数化类型更多,类型转换更少。实际上,这些GJ程序是先转换成不含泛型的通用Java程序再进行处理,编译器自动完成从泛型Java到通用Java的翻译。

  如何解决写爬虫IP受阻的问题?立即使用。

   什么是真实的java泛型

  我们都知道编译器会擦除泛型。编译器可以在编译源程序(带泛型的Java代码)时使用泛型类型信息来保证类型安全,验证大量如果没有泛型就不会被验证的类型安全约束,同时从生成的字节码中去掉这些类型信息。先验证一下:

  公共静态void main(String[] args) {

  ArrayListInteger ints=new ArrayListInteger();

  ints . add(1);

  ints . add(2);

  int . add(3);

  ArrayList string STS=new ArrayList string();

  STS . add( a );

  STS . add( b );

  STS . add( c );

  system . out . println(ints . getclass()==STS . getclass());

  }上面打印的结果是真的,因为

  按照理解,泛型被擦除后,原来的类型就检索不到了,都是对象的形式。这是真的吗?

  看一下下面的代码:

  导入Java . lang . reflect . parameterized type;导入Java . util . ArrayList;导入Java . util . list;公共类ClassTest {

  公共静态void main(String[] args)引发异常{

  ParameterizedType类型=(ParameterizedType)

  bar . class . getgenericsuperclass();

  system . out . println(type . getactualtypearguments()[0]);

  ParameterizedType字段类型=(ParameterizedType)

  Foo.class.getField(children )。getGenericType();

  system . out . println(field type . getactualtypearguments()[0]);

  parameterized type param type=(parameterized type)

  Foo.class.getMethod(foo ,List.class)。getGenericParameterTypes()[0];

  system . out . println(param type . getactualtypearguments()[0]);

  system . out . println(foo . class . gettype parameters()[0]。get bounds()[0]);

  }

  FooE类扩展CharSequence {

  public list bar children=new ArrayList bar();

  public ListStringBuilder foo(ListString foo){ return null;}

  公共void栏(列表?扩展字符串参数){}

  }

  类栏扩展FooString {}

  }打印出来

  班级。郎。字符串类com。Java拼图。大卫王。ClassTest $ Barclass Java。郎。字符串接口Java。郎。Charsequence你会发现每个类型参数都是保留的,可以在运行时通过反射机制获取。那么到底什么是“类型擦除”呢?至少有些东西被抹去了,对吧?是的,事实上,除了结构化信息之外的所有内容都被删除了。这里,结构化信息指的是与类结构相关的信息,而不是程序执行过程。换句话说,与类的类型参数及其字段和方法相关的元数据将被保留,并可以通过反射获得。

  本文来自我们,java教程专栏,欢迎学习!上面的java类型擦除真的能够完全擦除所有信息吗?更多详情请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: