一、Python3.6新特性

什么情况下不能运用 Java 泛型

 

1. 前语

Java 1.5 引入了泛型来保证类型安全,避免在运行时发作类型转换反常,让类型参数化,提高了代码的可读性和重用率。可是有些情况下泛型也是不允许运用的,今日就总结一下编码中不能运用泛型的一些场景。

2. 根本类型无法直接运用泛型

以下写法是过错的:

// error  Map<int,char> wrong= new HashMap<>()

根本类型是不能够作为泛型类型的,需要运用它们对应的包装类。

// OK Map<integer,character> wrong= new HashMap<>()

3. 泛型类型无法被直接实例化

泛型类型能够理解为一个笼统类型,只是代表了类型的笼统,因而咱们不能直接实例化它,下面的做法也是过错的:

public E first(Listlist){ // error  E e = new E(); return list.get(0);
}

4. 泛型无法作为静态变量类型

Java 中的静态类型随着类加载而实例化,此刻泛型的详细类型并没有声明。一起因为静态变量作为所有对象的同享变量,只要类实例化或许办法调用时才能确认其类型。假如是泛型类型将无法确认其类型。相同在类上声明的泛型也无法作为返回值类型呈现在类的静态办法中,下面的写法也是过错的:

public class Generic<T>{ // 不能将类声明的泛型类型作为静态变量 public static T t; // 也不能将类声明的泛型类型作为 静态办法的返回值 public static T rtval(Listlist){ return list.get(0);
}
}

5. 无法进行 instanceof 判别

Java 中的泛型是伪泛型,在编译期会被擦除,运行的字节码中不存在泛型,所以下面的判别条件无法进行:

public static void wrong(Listlist) { // error  if (list instanceof ArrayList) {
}
}

可是泛型的无界通配符  能够进行 instanceof 判别,你仔细想想为什么。

6. 无法创立参数化类型的数组

首要下面这种写法是对的:

// OK List[] arrayOfLists = new List[2];

可是加上了泛型就编译不通过了:

//error List[] arrayOfLists = new List[2];

假如不这么规定将引发以下逻辑过错:

// 假如上面的建立,则下面的也应该建立 Object[] stringLists = new List[]; // 那么咱们能够放入 字符串 List stringLists[0] = new ArrayList(); // 放入 Integer list stringLists[1] = new ArrayList(); // 这显然不合理 

7. 不能直接或许直接扩展Throwable

下面的两种写法将引发编译过错:

//  不能直接地扩展 Throwable  class IndirectException<T> extends Exception {} //  不能直接地扩展 Throwable  class DirectException<T> extends Throwable {}

假如建立将呈现:

try { // ... } catch (T e) { // 类型不确认  无法处理详细的反常逻辑 }

你怎么才能对反常进行详细的处理,这显然不便于精确的反常处理逻辑。可是你能够抛出一个 不确认的反常,可是相同不能在静态办法中运用类声明的泛型:

class Parser<T extends Exception> { // 这样是对的 public void okThrow(File file) throws T { // ... } // 静态办法不能呈现类声明的泛型类型作为返回值和反常 public static void wrongThrow(File file) throws T {
}
}

8. 泛型擦除后相同参数签名的办法不能重载

由于泛型擦除的原因,以下的不视为办法的重载且无法编译 :

public class NoReload { public void sets(SetstrSet) { } public void sets(SetintSet) { }
}

9. 总结

今日总结了 Java 泛型的一些运用误区,虽然平常 IDE 的提示会告诉咱们,可是这也是咱们经常会疏忽的一些知识点。假如有不足之处,请留言纠正。假如你想对泛型了解更多,可关注公众号:码农小胖哥 回复 generic 获取相关的学习笔记。

<ul "="">

本文转载于:https://blog.csdn.net/dafengit/article/details/106073709

java的不正确使用方法以及什么情况不能使用java的更多相关文章

  1. [翻译][Java]ExecutorService的正确关闭方法

    https://blog.csdn.net/zaozi/article/details/38854561 https://blog.csdn.net/z69183787/article/details ...

  2. paip.批处理清理java项目冗余jar的方法

    paip.批处理清理java项目冗余jar的方法 在myeclipse中开发的java项目遇到jar包冗余情况,如何删除项目中的冗余jar包啊?项目很大jar包一百多个. 2010-09-14 14: ...

  3. Java获取各种常用时间方法大全

    Java获取各种常用时间方法大全 package cc.javaweb.test; Java中文网,Java获取各种时间大全 import java.text.DateFormat; import j ...

  4. Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法

    Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法 java.lang.OutOfMemoryError: Java heap sp ...

  5. java.lang.reflect.Method.getAnnotation()方法示例

    转: java.lang.reflect.Method.getAnnotation()方法示例 作者: 初生不惑 Java技术QQ群:227270512 / Linux QQ群:479429477   ...

  6. 第29篇-调用Java主类的main()方法

    在第1篇中大概介绍过Java中主类方法main()的调用过程,这一篇介绍的详细一点,大概的调用过程如下图所示. 其中浅红色的函数由主线程执行,而另外的浅绿色部分由另外一个线程执行,这个线程最终也会负责 ...

  7. JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法

    前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式, 这样的处理方式让写的同学 ...

  8. 从阿里Java开发手册学习线程池的正确创建方法

    前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更 ...

  9. 【转】线程池体系介绍及从阿里Java开发手册学习线程池的正确创建方法

    jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口  |–Execut ...

随机推荐

  1. 【Java常用类】Math

    Math 说明 java.lang.Math提供了一系列静态方法用于科学计算.其方法的参数和返回 值类型一般为double型. 方法 abs 绝对值 acos,asin,atan,cos,sin,ta ...

  2. Solon 开发,八、注入依赖与初始化

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  3. Solon Web 开发,五、数据访问、事务与缓存应用

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  4. [Windows]为windows系统鼠标右键添加软件和图标

    转载自 https://blog.csdn.net/p312011150/article/details/81207059 一.打开注册表 首先打开windows的注册表,当然了,我个人倾向于 (1) ...

  5. spring 事务传播性

    一.什么是事务传播性 大白话讲就是,方法之间互相调用的时候,事务如何传播,比如A()调用B(),B()的事务是和A()共用一个事务(失败一起提交)? 还是新事务(两者事务互不影响)?,还是说B()不需 ...

  6. element 日期时间选择器type = "datetimerange",限制时间的选择范围

    这里限制了只能选择一周的时间   pickerOptions:{          onPick(time){              // 如果选择了只选择了一个时间              i ...

  7. linux下查看 SELinux状态及关闭SELinux

    SELinux全称为安全增强式 Security-Enhanced Linux(SELinux),是一个在内核中实践的强制存取控制(MAC)安全性机制.SELinux 首先在 CentOS 4 出现, ...

  8. Solaris平台,如何通过端口号快速查看PID(进程)

    1. vi /tmp/test.ksh #!/bin/ksh line='---------------------------------------------' pids=$(/usr/bin/ ...

  9. python 小兵(7)迭代器

    阅读目录 函数名的使用以及第一类对象 闭包 迭代器 回到顶部 函数名的使用以及第一类对象 函数名的运用 函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量 1.函数名的内存地址 ...

  10. java 多线程 start方法 run方法 简单介绍。

    一 start开启一个多线程, run 只是一个内部的方法. package com.aaa.threaddemo; /* * start方法的作用? * 在 Java中启动多线程调用的是start方 ...