java泛型区间_JAVA 14(泛型)
泛型
jdk1.5之后出现的新特性,用于解决安全问题,防止集合类的各种子类中存有不同类型的对象,导致编译通过,运行出现对象类型转换异常。
好处
1,讲运行时期出现问题ClassCastException,转移到了编译时期,方便与程序员解决问题,安全。
2,避免了强制转换的麻烦。
例1
例2
迭代器,比较器,集合的子类可以定义泛型
例3
泛型类:当累着要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。现在订阅泛型来完成扩展。
泛型方法:
例4
泛型类定义的泛型,在整个类中有效,如果被方法使用,泛型类的对象明确了类型,方法所操作的类型也就确定了
如果想要让方法操作不同类型的对象,而且类型不确定。可以将泛型定义在方法上。
特殊:静态方法不可以访问类上定义的泛型,如果静态方法操作的引用数据类型不确定,可以将泛型定义在静态方法上。泛型放在static后,放在返回值类型前面。
泛型接口:自行脑补。
interface xxx
{
}
class int implements xxx
{
}
格式:
通过<>来定义要操作的引用数据类型。
ArrayList al =new ArrayList ();
Iterator it = al.iterator();
在使用java提供的对象时,什么时候使用泛型呢?
通常在集合框架中很常见。其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
举例:
import java.util.*;
public class Test {
public static void main(String[] args)
{
ArrayList al = new ArrayList ();
al.add("zhangxu1");
al.add("zhangxu2");
al.add("zhangxu3");
al.add("zhangxu4");
Iterator it = al.iterator();
while(it.hasNext())
{
String s =it.next();
sop(s+"...."+s.length());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
在比较器中的应用:
import java.util.*;
public class Test {
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new Com());
ts.add("abcd");
ts.add("dbcde");
ts.add("cbcdf");
ts.add("ebcdg");
ts.add("wbcdh");
ts.add("gbcdi");
Iterator it = ts.iterator();
while(it.hasNext())
{
String s =it.next();
sop(s);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class Com implements Comparator
{
public int compare(String o1,String o2)
{
return o1.length()-o2.length();
}
}
泛型类举例:
import java.util.*;
public class Test {
public static void main(String[] args)
{
tools a = new tools();
a.setObject("AAAA");
String s =a.getObjects();
sop(s);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class tools
{
private QQ q;
public void setObject(QQ q)
{
this.q=q;
}
public QQ getObjects()
{
return q;
}
}
泛型方法:
import java.util.*;
public class Test {
public static void main(String[] args)
{
Demo d = new Demo();
d.show(666);
d.show("666666");
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class Demo
{
public void show(T t)
{
System.out.println(t);
}
}
泛型限定,把泛型限制在一定的区间内部。
?:通配符,占位符
泛型的限定:
? extends e:可以接受e类型或者e的子类型 //上限
? super e:可以接受e类型或者e的父类型 //下限
例子:
打印方法应用了泛型限定,比较器中传入了父类可以比较子类中从父类继承来的属性和方法的返回值。
import java.util.*;
public class Test {
public static void main(String[] args)
{
TreeSet ts = new TreeSet(new Com());
ts.add(new Student("abc03"));
ts.add(new Student("abc02"));
ts.add(new Student("abc06"));
ts.add(new Student("abc01"));
TreeSet ts1 = new TreeSet(new Com());
ts1.add(new Worker("wwabc03"));
ts1.add(new Worker("wwabc02"));
ts1.add(new Worker("wwabc06"));
ts1.add(new Worker("wwabc01"));
Iterator it = ts.iterator();
while(it.hasNext())
{
sop(it.next().getname());
}
Iterator ww = ts1.iterator();
while(ww.hasNext())
{
sop(ww.next().getname());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void printColl(ArrayList extends Persion> al)
{
Iterator extends Persion> it = al.iterator();
while(it.hasNext())
{
sop(it.next().getname());
}
}
}
class Persion
{
private String name;
Persion(String name)
{
this.name=name;
}
public String getname()
{
return name;
}
}
class Student extends Persion
{
Student(String name) {
super(name);
}
}
class Worker extends Persion
{
Worker(String name) {
super(name);
}
}
class Com implements Comparator
{
public int compare(Persion arg0, Persion arg1)
{
return arg0.getname().compareTo(arg1.getname());
}
}
java泛型区间_JAVA 14(泛型)相关推荐
- java泛型实例化_java基础-泛型举例详解
泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...
- java map 泛型 反射_java - 反射操作泛型
反射操作泛型 Java的泛型采用的是泛型擦除的机制,泛型仅仅是给编译器javac使用的,为了确保数据的安全性和免去强制类型转换的问题,一旦编译完成,所有和泛型有关的类型将全部擦除. 为了通过反射操作这 ...
- java 泛型 恶心_Java的泛型原来这样让人不舒服
Type erasure Java泛型中的类型擦除,意为只在编译时刻进行类型检查,实际在运行时,编译器会自动插入相应的转换(cast)代码. List list = new ArrayList(); ...
- java 文件通配符_Java中泛型通配符的使用方法示例
本文实例讲述了Java中泛型通配符的使用方法.分享给大家供大家参考,具体如下: 一 点睛 引入通配符可以在泛型实例化时更加灵活地控制,也可以在方法中控制方法的参数. 语法如下: 泛型类名 extend ...
- java 泛型方法 实例化_Java让泛型实例化的方法
泛型对象可以实例化吗? 不可以,T t=new T()是不可以的,编译器会报错.由于泛型擦除,编译器在编译时无法确定泛型所对应的真实类型 解决方法 使用反射新建实例 Type superclass = ...
- java 泛型枚举_java枚举泛型
有! 泛型和枚举都是JDK1.5版本之后加入的新特性,泛型将程序代码的类型检查提前到了编译期间进行,枚举类型增强了程序代码的健壮性. 1. 泛型 在JDK1.5版本之前,如果在集合中添加了不同类型的数 ...
- java 泛型 问号_Java中泛型 问号的作用
这是jdk1.5泛型的典型应用: 第一种写法,叫做使用泛型方法: public void thisIsT(List list){ //... } 当然还可以这样写: public void thisI ...
- java 类型通配符_java中泛型之类型通配符(?)
实体类 package cn.xy.model; /** * 生物类 * @author xy * */ public class Living { private String name; publ ...
- java 新功能_Java 14的新功能
java 新功能 2020年3月17日,Oracle发布了名为Java 14的Java新版本,其中包括许多新功能,工具,安全性,调试和更新的文档方面的改进. 但是,Oracle还向您提供Java的较旧 ...
最新文章
- [转]【无私分享:ASP.NET CORE 项目实战(第十四章)】图形验证码的实现
- 高通平台中gpio简单操作和调试
- leetCode题解之Reshape the Matrix
- 数据太少怎么办?试试自监督学习,CV训练新利器,fast.ai新教程,LeCun点评
- atoi和itoa函数实现
- git merge 的撤销
- c++之使用std::sort对坐标进行排序
- ostringstream的使用方法
- 芒格:如何面对投资中的巨大回撤?
- 是时候激活你的批判性思维了
- codeforces-1009D Relatively Prime Graph
- 有域名有服务器没有网站可以备案吗,只有域名没有服务器可以备案吗
- 15款你可能不知道的精致Mac应用
- 如何找到官方公布的和汇丰公布的PMI数据
- ubuntu 18.04.2 server基本安装配置
- calcHist的使用
- spring及boot注解
- 揭秘:QQ盗号背后的产业链,惊人的暴利!
- Evernote和有道云笔记的比较
- 程序员做外包压力有多大?外包公司是个什么体验?