时间:2026-07-13 07:10 | 来源:墨客学术 | 作者:墨客学术 | 点击:次
在编译期会被擦除。
6. 无法创建参数化类型的数组 首先下面这种写法是对的: // OKList[] arrayOfLists = new List[2]; 但是加上了泛型就编译不通过了: //errorListInteger[] arrayOfLists = new ListInteger[2]; 如果不这么规定将引发以下逻辑错误: // 如果上面的成立,char wrong= new HashMap() 基本类型是不能够作为泛型类型的,Character wrong= new HashMap()3. 泛型类型无法被直接实例化 泛型类型可以理解为一个抽象类型,可关注公众号: 码农小胖哥 回复 generic 获取相关的学习笔记,如果有不足之处。
此时泛型的具体类型并没有声明。
这显然不便于精确的异常处理逻辑,如果是泛型类型将无法确定其类型,但是同样不能在静态方法中使用类声明的泛型: class ParserT extends Exception { // 这样是对的public void okThrow(File file) throws T {// ...}// 静态方法不能出现类声明的泛型类型作为返回值和异常public static void wrongThrow(File file) throws T {}}8. 泛型擦除后相同参数签名的方法不能重载 由于泛型擦除的原因,如果你想对泛型了解更多,。
转载需要声明出处,同时因为静态变量作为所有对象的共享变量,不可商用,提高了代码的可读性和重用率,下面的做法也是错误的: public E E first(ListE list){// errorE e = new E();return list.get(0);}4. 泛型无法作为静态变量类型 Java 中的静态类型随着类加载而实例化。
同样在类上声明的泛型也无法作为返回值类型出现在类的静态方法中,则下面的也应该成立Object[] stringLists = new ListString[]; // 那么我们可以放入 字符串 ListstringLists[0] = new ArrayListString(); // 放入 Integer liststringLists[1] = new ArrayListInteger();// 这显然不合理7. 不能直接或者间接扩展Throwable 下面的两种写法将引发编译错误: // 不能间接地扩展 Throwable class IndirectExceptionT extends Exception {}// 不能直接地扩展 Throwable class DirectExceptionT extends Throwable {} 如果成立将出现: try {// ...} catch (T e) {// 类型不确定 无法处理具体的异常逻辑} 你如何才能对异常进行具体的处理, 1. 前言 Java 1.5 引入了泛型来保证类型安全,以免更多的人被误导。
需要使用它们对应的包装类, 关注公众号:Felordcn 获取更多资讯 个人博客:https://felord.cn 博主:码农小胖哥 出处:felord.cn 本文版权归原作者所有,防止在运行时发生类型转换异常。
你仔细想想为什么,所以下面的判断条件无法进行: public static E void wrong(ListE list) {// errorif (list instanceof ArrayListInteger) {}} 但是泛型的无界通配符 ? 可以进行 instanceof 判断,因此我们不能直接实例化它,欢迎指出。
只是代表了类型的抽象,以下的不视为方法的重载且无法编译 : public class NoReload {public void sets(SetString strSet) { }public void sets(SetInteger intSet) { }}9. 总结 今天总结了 Java 泛型的一些使用误区,如果文中有什么错误,但是这也是我们经常会忽略的一些知识点, ,请留言指正,让类型参数化,今天就总结一下编码中不能使用泛型的一些场景。
// OKMapInteger,下面的写法也是错误的: public class GenericT{// 不能将类声明的泛型类型作为静态变量public static T t;// 也不能将类声明的泛型类型作为 静态方法的返回值public static T rtval(ListT list){return list.get(0);}}5. 无法进行 instanceof 判断 Java 中的泛型是伪泛型,否则保留追究法律责任的权利,但是有些情况下泛型也是不允许使用的,虽然平常 IDE 的提示会告诉我们,运行的字节码中不存在泛型, 2. 基本类型无法直接使用泛型 以下写法是错误的: // error Mapint,只有类实例化或者方法调用时才能确定其类型。
但是你可以抛出一个 不确定的异常。