当前位置:网站首页 > Java教程 > 正文

java约束教程



为了有效地使用 Java 泛型,必须考虑以下限制:

  • 无法实例化具有原始类型的泛型类型
  • 无法创建类型参数的实例
  • 无法声明类型为类型参数的静态字段
  • 无法将 Casts 或 instanceof 与参数化类型一起使用
  • 无法创建参数化类型的数组
  • 无法创建,catch或引发参数化类型的对象
  • 无法重载每个重载的形式参数类型擦除为相同原始类型的方法

考虑以下参数化类型:

创建对象时,不能用基本类型代替类型参数或:

您只能将非基本类型替换为类型参数和:

请注意,Java 编译器将到和''到自动装箱:

有关自动装箱的更多信息,请参阅数字和字符串类中的自动装箱和拆箱。

您不能创建类型参数的实例。例如,以下代码会导致编译时错误:

解决方法是,可以通过反射创建类型参数的对象:

您可以按以下方式调用方法:

类的静态字段是该类的所有非静态对象共享的类级别变量。因此,不允许使用类型参数的静态字段。考虑以下类别:

如果允许使用类型参数的静态字段,则以下代码将被混淆:

因为静态字段由,和共享,所以的实际类型是什么?不能同时是,和。因此,您不能创建类型参数的静态字段。

因为 Java 编译器会擦除通用代码中的所有类型参数,所以您无法验证在运行时使用的是泛型的参数化类型:

传递给方法的参数化类型为:

运行时不跟踪类型参数,因此无法区分和之间的区别。您最多可以做的是使用无界通配符来验证列表是否为:

通常,除非使用不受限制的通配符对其进行参数化,否则无法将其转换为参数化类型。例如:

但是,在某些情况下,编译器知道类型参数始终有效,并允许强制转换。例如:

您不能创建参数化类型的数组。例如,以下代码无法编译:

以下代码说明了将不同类型插入到数组中时发生的情况:

如果您对通用列表try相同的操作,则会出现问题:

如果允许使用参数化列表的数组,则先前的代码将无法抛出所需的。

通用类不能直接或间接扩展类。例如,以下类将无法编译:

方法无法catch类型参数的实例:

但是,您可以在子句中使用类型参数:

一个类不能有两个重载的方法,这些方法在类型擦除后将具有相同的签名。

重载将共享相同的类文件表示形式,并且将生成编译时错误。

  • 上一篇: java教程 张孝祥
  • 下一篇: java接口视频教程
  • 版权声明


    相关文章:

  • java教程 张孝祥2025-03-07 19:18:06
  • java编程初步教程2025-03-07 19:18:06
  • linux终端java开发教程2025-03-07 19:18:06
  • java邮箱破解教程2025-03-07 19:18:06
  • java免费教程视频2025-03-07 19:18:06
  • java接口视频教程2025-03-07 19:18:06
  • java team使用教程2025-03-07 19:18:06
  • java自学教程基础知识教程2025-03-07 19:18:06
  • 北大青鸟教程JAVA2025-03-07 19:18:06
  • java变量安全教程2025-03-07 19:18:06