首页 > 编程语言 >无涯教程-Java泛型 - 无限类型擦除

无涯教程-Java泛型 - 无限类型擦除

时间:2023-12-28 16:37:02浏览次数:47  
标签:Box Java String integerBox 无涯 擦除 new stringBox public

如果使用无限制的类型参数,则Java Compiler会将通用类型的类型参数替换为对象。

package com.learnfk;

public class GenericsTester {
   public static void main(String[] args) {
      Box<Integer> integerBox = new Box<Integer>();
      Box<String> stringBox = new Box<String>();

      integerBox.add(new Integer(10));
      stringBox.add(new String("Hello World"));

      System.out.printf("Integer Value :%d\n", integerBox.get());
      System.out.printf("String Value :%s\n", stringBox.get());
   }
}

class Box<T> {
   private T t;

   public void add(T t) {
      this.t = t;
   }

   public T get() {
      return t;
   }   
}

在这种情况下,java编译器将T用对象类替换,并且在类型擦除之后,编译器将为以下代码生成字节码。

package com.learnfk;

public class GenericsTester {
   public static void main(String[] args) {
      Box integerBox = new Box();
      Box stringBox = new Box();

      integerBox.add(new Integer(10));
      stringBox.add(new String("Hello World"));

      System.out.printf("Integer Value :%d\n", integerBox.get());
      System.out.printf("String Value :%s\n", stringBox.get());
   }
}

class Box {
   private Object t;

   public void add(Object t) {
      this.t = t;
   }

   public Object get() {
      return t;
   }   
}

在两种情况下,输出都是相同的-

Integer Value :10
String Value :Hello World

参考链接

https://www.learnfk.com/java-generics/java-generics-unbound-typeerasure.html

标签:Box,Java,String,integerBox,无涯,擦除,new,stringBox,public
From: https://blog.51cto.com/u_14033984/9016138

相关文章

  • 开源免费又好用的中式数据报表:UReport2是一款高性能的架构在Spring之上纯Java报表引
    北润乾、南帆软,数加发力在云端。uReport身何安?中式报表真开源。报表江湖之中,uReport安身立命的产品品类定位是什么?说来很简单,uReport的价值在于填补了这样一个市场空白:开源免费又好用的中式数据报表UReport2是一款高性能的架构在Spring之上纯Java报表引擎,通过迭代单元格可以......
  • java注解
    一、注解概述 二、JDK内置注解1、@Override 2、@Deprecated 3、@SuppressWarnings 4、@Functionalinterface 三、元注解1、概念 2、@Retention 3、@Target 四、自定义注解  五、注解的注意事项  六、通过注解运行指定类中的指......
  • Java反射
    一、获取Class对象1、调用运行时类的.class属性ClassstuClass=Student.class;2、调用运行时类的getClass方法Students=newStudent();ClassstuClass=s.getClass();3、调用Class类的静态方法:forName(StringclassPath)【该种方法用的多】ClassstuClass=Clas......
  • java-异常处理
    在Java中,异常是指程序在运行过程中遇到的错误或异常情况,它可能导致程序无法正常执行。Java提供了异常处理机制,允许我们捕获和处理这些异常,以便程序能够更加健壮地运行。Java中的异常分为两种类型:CheckedException(受检异常)和UncheckedException(非受检异常)。CheckedException(受......
  • JavaScript | Variable、Function、Module、Class (一)
    函数函数声明functionsayHello(){return"HelloJavaScript!!"}函数表达式letsayHello=function(){return"HelloJavaScript!!"}函数、变量提升:函数和变量都会被提升,且函数会被优先提升;提升的意思是只要有声明定义,那么先调用都可以。因为JS会把定义放到......
  • Java 原型模式
    原型模式是一种创建型设计模式,用于在保证性能的情况下创建新的对象实例。原型模式允许一个对象再创建另外一个可定制的对象,而无需知道创建的细节。其工作原理是通过拷贝实现对象创建,即clone()。但是我们通过new也能创建一个属性一样的对象,两者的区别是什么呢?new操作符:用于创建......
  • Linux 服务器 Java 进程消失问题怎么解决
    当您在使用NginxWebUI进行反向代理时遇到504错误,这通常是由于Nginx无法在合理的时间内完成请求处理。504错误是Nginx的通用错误,表示"网关超时"。以下是可能导致此问题的原因以及相应的解决方案:1.后端服务器问题原因:后端服务器可能由于各种原因无法及时响应。解决方案:检查后端服务......
  • 无涯教程-Java泛型 - 绑定类型清除
    如果使用有界的类型参数,Java编译器会用其界线替换通用类型的类型参数。packagecom.learnfk;publicclassGenericsTester{publicstaticvoidmain(String[]args){Box<Integer>integerBox=newBox<Integer>();Box<Double>doubleBox=newBox<Double>()......
  • java-类
    在Java中,类是面向对象编程的基本概念之一。类是用来描述对象的属性(状态)和行为(方法)的模板或者蓝图。当我们创建一个类时,实际上是定义了一个新的数据类型,可以根据这个类来创建相应的对象。下面是一个简单的类的示例:javaCopyCodepublicclassPerson{//定义类的属性S......
  • java-继承
    在面向对象编程中,继承是一种重要的特性,它允许我们创建一个新的类(称为子类),从已有的类(称为父类或超类)继承属性和方法。通过继承,子类可以获得父类的特性,并且可以在此基础上添加新的特性或修改已有的特性。下面是一个简单的继承的示例:javaCopyCode//定义父类classAnimal{......