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 ...
随机推荐
- Python函数与lambda 表达式(匿名函数)
Python函数 一.函数的作用 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段 函数能提高应用的模块性和代码的重复利用率 python 内置函数:https://docs.pytho ...
- Ubuntu16桌面版编译OpenCV4的java库和so库
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- (2)用Micropython将ESP32数据上云
之前我们尝试过直接把LED点亮并且闪烁. 今天尝试一下将LED的开关状态上云,并可以通过云来进行数据下发. 数据要上云,首先开发板要联网. 首先我们会用 Python的network 库, 在netw ...
- 【刷题-LeetCode】224. Basic Calculator
Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...
- nao机器人使用手册
简单使用和保养 开关机和马达 开机是按一下,后来按一下相当于重启了一次程序,3是播报IP地址,5秒是关机,8秒是强制关机. 电池 3月左右不用需要取下电池.夏天5-8小时,冬天8-10小时充电.活动时 ...
- condition_variable中的和wait_once和notify_one及notify_all实例代码
// ConsoleApplication6.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<thread> #in ...
- (1)puppet安装
简介: 基于C/S架构的Puppet更新方式一般有两种,一种是Agent端设置同步时间主动去PuppetMaster端拉取配置,另一种是通过PuppetMaster端使用puppet kick命令或者 ...
- 「数据结构」Link-Cut Tree(LCT)
#1.0 简述 #1.1 动态树问题 维护一个森林,支持删除某条边,加入某条边,并保证加边.删边之后仍然是森林.我们需要维护这个森林的一些信息. 一般的操作有两点连通性,两点路径权值和等等. #1.2 ...
- 在树莓派上开发SpringBoot 之使用VSCode远程开发
一些运行在ARM单板电脑上的IoT应用通常会提供RESTful风格的API接口.本次的文章记录如何在本地电脑上通过VS Code的远程开发功能,在树莓派端创建一个SpringBoot工程,并实现调试和 ...
- Linux之shell入门
一.编写规范 代码规范: #!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器] shell相关指令 文件命名规范: 文件名.sh .sh是linux下bash shell 的默 ...