java的不正确使用方法以及什么情况不能使用java
一、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的更多相关文章
- [翻译][Java]ExecutorService的正确关闭方法
https://blog.csdn.net/zaozi/article/details/38854561 https://blog.csdn.net/z69183787/article/details ...
- paip.批处理清理java项目冗余jar的方法
paip.批处理清理java项目冗余jar的方法 在myeclipse中开发的java项目遇到jar包冗余情况,如何删除项目中的冗余jar包啊?项目很大jar包一百多个. 2010-09-14 14: ...
- Java获取各种常用时间方法大全
Java获取各种常用时间方法大全 package cc.javaweb.test; Java中文网,Java获取各种时间大全 import java.text.DateFormat; import j ...
- Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法
Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法 java.lang.OutOfMemoryError: Java heap sp ...
- java.lang.reflect.Method.getAnnotation()方法示例
转: java.lang.reflect.Method.getAnnotation()方法示例 作者: 初生不惑 Java技术QQ群:227270512 / Linux QQ群:479429477 ...
- 第29篇-调用Java主类的main()方法
在第1篇中大概介绍过Java中主类方法main()的调用过程,这一篇介绍的详细一点,大概的调用过程如下图所示. 其中浅红色的函数由主线程执行,而另外的浅绿色部分由另外一个线程执行,这个线程最终也会负责 ...
- JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法
前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式, 这样的处理方式让写的同学 ...
- 从阿里Java开发手册学习线程池的正确创建方法
前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更 ...
- 【转】线程池体系介绍及从阿里Java开发手册学习线程池的正确创建方法
jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口 |–Execut ...
随机推荐
- Allwinner F1C100s coremark测试
ccu register base:0x01c20000 devmem 0x01c20000 The PLL output=(24MHz*N*K)/(M*P) N=31 K=1 M=1 P=/1 re ...
- POJ 2387 Til the Cows Come Home (最短路径 模版题 三种解法)
原题链接:Til the Cows Come Home 题目大意:有 个点,给出从 点到 点的距离并且 和 是互相可以抵达的,问从 到 的最短距离. 题目分析:这是一道典型的最短路径模版 ...
- 如何使用Github搭建自己的博客
1.前期准备 sudo apt-get install npm sudo npm install hexo -g 首先使用如下命令创建项目,name是你要创建的博客的名字: hexo init {na ...
- 【记录一个问题】libtask无法在android下编译通过
源码来自:https://github.com/msteinert/libtask 首先是asm.S无法编译通过. 其次,编译context.c出现这些错误: .//context.c:124:19: ...
- IDEA2017 maven Spark HelloWorld项目(本地断点调试)
作为windows下的spark开发环境 1.应用安装 首先安装好idea2017 java8 scalaJDK spark hadoop(注意scala和spark的版本要匹配) 2.打开idea, ...
- 学习鸟哥linux私房菜--安装centos5.6(u盘安装,中文乱码)
题头为"学习鸟哥Linux私房菜"的内容,均为博主在看鸟哥的Linux私房菜第三版的学习经历收获.以下正文: 鸟哥第一部分讲Linux规则与安装,看到第四章正式开始讲实际安装,于是 ...
- golang中的标准库http
Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. http客户端 基本的HTTP/HTTPS请求 Get.Head.Post和PostForm函数发出HTTP/HTTP ...
- python初学笔记之列表推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表.注意:简而言之,就是把普通的多行for循环压缩成一行代码,这种压缩语法适用于列表.字典.集合等可迭代数据结构(iterables).创建 ...
- python 小兵面向对象
Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...
- JavaScript之ES6常用新特性
参考:https://www.jianshu.com/p/ac1787f6c50f 变量声明:const 与 let const:常量,必须初始化值 let:变量 格式:const 变量A = & ...