本章目标
掌握通配符“?”的使用
掌握受限泛型的设置
掌握泛型与子类继承的限制
匹配任意类型的通配符
在开发中对象的引用传递是最常见的,但是如果在泛型类的操作中,在进行引用传递的时候泛型类型必须匹配才可以传递,否则是无法传递的。
public class GenericDemo12 { public static void main(String[] args) { Info<String> i = new Info<String>();//指定 String 为泛型类型 i.setVar("chaoyi");//设置字符串 fun(i);//错误,无法传递 } public static void fun(Info<Object> temp){//此处可以接收 Object 泛型类型的 Info 对象 System.out.println("内容:"+temp); } /* 结果: * The method fun(Info<Object>) in the type GenericDemo12 is not applicable for the arguments (Info<String>) * at J031002.GenericDemo12.main(GenericDemo12.java:7) * */ }
使用通配符“?”
public class GenericDemo14 { public static void main(String[] args) { Info<String> i = new Info<String>();//指定 String 为泛型类型 i.setVar("chaoyi");//设置字符串 fun(i);//错误,无法传递 } public static void fun(Info<?> temp){//此处可以接收 Info 对象 System.out.println("内容:"+temp); } /* 结果: * 内容:chaoyi * */ }
以上程序在fun()方法中使用“Info<?>”的代码形式,表示可以使用任意的泛型类型对象,这样做的话fun()方法定义的就比较合理了,但是在使用以上语法的时候也有一个注意点,即:如果使用“?”接收泛型对象的时候,则不能设置被泛型指定的内容
受限泛型
在引用传递中,泛型操作中也可以设置一个泛型对象的范围上限和范围下限。范围上限使用extends关键字声明,表示参数化的类型可能是所指定的类型,或者是此类型的子类,而范围下限使用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object类。
——设置上限:
————声明对象:类名称<? extends 类> 对象名称
————定义类:[访问权限] 类名称<泛型标识 extends 类>{}
——设置下限:
————声明对象:类名称<? super 类> 对象名称
————定义类:[访问权限] 类名称<泛型标识 extends 类>{}
泛型的上限
public class GenericDemo17 { public static void main(String[] args) { Info<Integer> i1 = new Info<Integer>();//声明 Integer 的泛型对象 Info<Float> i2 = new Info<Float>();//声明 Float 的泛型对象 i1.setVar(30);//设置整数,自动装箱 i2.setVar(30.1f);//设置小数,自动装箱 fun(i1);//是数字,可以传递 fun(i2);//是数字,可以传递 } //接收 Info 对象,范围上限设置为 Number, 所以只能接收数字类型 public static void fun(Info<? extends Number> temp){ System.out.print(temp+"、"); } /* 结果: * 30、30.1、 * */ }
泛型的下限
public class GenericDemo21 { public static void main(String[] args) { Info<Object> i1 = new Info<Object>();//满足下限范围 Info<String> i2 = new Info<String>();//满足下限范围 i1.setVar(new Object());//设置 Object 对象 i2.setVar("chaoyi");//设置字符串 fun(i1); fun(i2); } //只能接收 String 或Object 类型的泛型 public static void fun(Info<? super String> temp){ System.out.println("内容:"+temp); } /* 结果: * 内容:java.lang.Object@6bbc4459 * 内容:chaoyi * */ }
解释:泛型与子类继承的限制
一个类的子类可以通过对象多态性,为其父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接收,例如:Info <String>不能使用Info<Object>。
相关推荐
sql中经常用like进行模糊查询,而模糊查询就要用到百分号“%”,下划线“_”这些通配符,其中“%”匹配任意多个字符,“_”匹配单个字符。如果我们想要模糊查询带有通配符的字符串,如“60%”,“user_name”,就...
网上只看到有通配符查找,返回boolean值的,为进行补充,单独写了一个通配符查找单元MatchFind,主要的为MatchFindStr(MainStr,SubStr)函数,返回符合条件的通配符的字符。 奇怪的是在winxp下,微软的查找中文使用...
易语言文本实现匹配通配符源码,文本实现匹配通配符
中文子网掩码和通配符掩码计算器 简单实用
带通配符的字符串匹配算法,带通配符的字符串匹配算法
WPS 通配符使用全局替换,WPS 中文匹配,WPS正则使用
C++实现字符串匹配函数,匹配中可以包括通配符
360碍于各大广告商的抗议,从2015年起取消了360手机卫士通讯录黑白名单的通配符(*)功能,并在官网停止了旧版下载,使用户再无法对号段进行设置。本资源是旧版(5.2版)360手机卫士,支持通配符功能,有需要此功能...
关于通配符的用法 通配符"的知识 关于通配符的用法
易语言匹配通配符API源码,匹配通配符API,匹配通配符,PathMatchSpec
Java 通过通配符查找文件 例如:*.*, *.java, a*.*, a*.java
* 一个参数通配符的实例 * 说明:对一个包含了数值元素的集合进行汇总运算。在这种情况下,用户并不关心 * 集合中的每一个对象是什么类型,只要它是数值型即可,而且,用户也希望集合中可以 * 存放不同类型的数值...
所有通配符以及用法.pdf所有通配符以及用法.pdf所有通配符以及用法.pdf所有通配符以及用法.pdf所有通配符以及用法.pdf所有通配符以及用法.pdf
易语言源码易语言寻找字节集通配符源码.rar 易语言源码易语言寻找字节集通配符源码.rar 易语言源码易语言寻找字节集通配符源码.rar 易语言源码易语言寻找字节集通配符源码.rar 易语言源码易语言寻找字节集通配符...
vc++ 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。直接拷贝代码就能使用。部分函数功能:带通配符的字符串匹配 参数:lpszSour是一个普通字符串; lpszMatch是一可以包含通配符的...
vc 带通配符的字符串匹配算法实例源代码,用"*" 和 "?"进行字符串的匹配查找。直接拷贝代码就能使用。部分函数功能:带通配符的字符串匹配 参数:lpszSour是一个普通字符串; lpszMatch是一可以包含通配符的...
java 通配符使用示例 java 通配符使用示例 java 通配符使用示例
带通配符的基于身份加密方案WIBE大多存在以下缺陷:a仅达到选择身份selective-ID安全, 安全系数较低; b其私钥或密文长度随身份级数呈线性递增, 需要耗费大量的存储空间。针对上述问题, 运用Waters的双系统加密技术, ...
SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。 SQL 通配符必须与 LIKE 运算符一起使用。
Struts2_Action学习笔记、通配符{1},{2}......