- 浏览: 778725 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (256)
- ssh (18)
- webservice (8)
- java基础 (38)
- j2EE方方面面 (17)
- 随意涂鸭!呵呵 (2)
- 数据库 (22)
- work (10)
- XML与XML解析 (9)
- 测试 (2)
- sso (1)
- ldap (6)
- java 模板技术 (4)
- 版本管理 (1)
- 每日小点滴 (26)
- javascript (26)
- Jakarta Commons (2)
- css (6)
- 设计 (3)
- Eclipse插件开发 (3)
- BAP (3)
- web控件 (2)
- java加密解密 (4)
- 调优 (6)
- 界面技术 (3)
- java多线程 (6)
- 互联网 (2)
- 日志管理 (4)
- java调度 (3)
- rest (0)
- Python (2)
- mobile (2)
- 2016的故事 (4)
- Docker (1)
- NOSQL_Hadoop (0)
最新评论
-
promiseloney:
这个女程序员厉害了。。。
JVM调优:GC 参数 -
zxjlwt:
可以通过WebService上传一个文件吗?素人派http:/ ...
webservice传送XML大小估算 -
liaoshaoyang:
写的不错嘛 可以做参考
权限管理设计一 -
aaaaaaaaabaas:
谢谢,对我有帮助
Apache Commons Configuration使用入门 -
Jack_Wilshere:
com.smartdot.pdm.business.corp. ...
java导出txt
一、受限制的通配符
package generic; import generic.windcard.Circle; import generic.windcard.Shape; import java.awt.Canvas; import java.util.ArrayList; import java.util.List; //受限制的通配符 public class BoundedWildcard { //说明Circle类继承自Shape类 private static Circle circle= new Circle(); private static Shape shape=new Shape(); public void drawAll(List<Shape> shapes) { for (Shape s : shapes) { s.draw(new Canvas()); } } public void drawAllWithWildcard(List<? extends Shape> shapes) { for (Shape s : shapes) { s.draw(new Canvas()); } } public static void main(String args[]){ /* * l1与l2对比结果: * drawAll(List<Shape> shapes):只可以接受泛型类型为Shape类型的 * List<? extends Shape> shapes):可以接受泛型类型为Shape及Shape子类的声明 * * */ BoundedWildcard boundedWildcard=new BoundedWildcard(); List<Shape> l1=new ArrayList<Shape>(); l1.add(circle); boundedWildcard.drawAll(l1); boundedWildcard.drawAllWithWildcard(l1); List<Circle> l2=new ArrayList<Circle>(); l2.add(circle); //boundedWildcard.drawAll(l2); The method drawAll(List<Shape>) in the type BoundedWildcard is not applicable for the arguments (List<Circle>) boundedWildcard.drawAllWithWildcard(l2); /* * l3与l4对比结果: * List<Shape> l3=new ArrayList<Shape>();可以接受泛型类型为Shape及Shape子类的元素 * List<? extends Shape> l4=new ArrayList<Shape>():只可以增加null类型的元素 * */ List<Shape> l3=new ArrayList<Shape>(); l3.add(shape); l3.add(circle); /* *泛型声明中如果有通配符?,则在这个声明指向的泛型对象中,除了null不能加入任何的对象。 *即不能把对象放进一个未知类型的集合中去 * */ List<? extends Shape> l4=new ArrayList<Shape>(); // l4.add(shape);//complie error: //l4.add(circle);;//complie error: l4.add(null); } }
二、泛型方法
package generic; import java.util.Collection; import java.util.LinkedList; import java.util.List; //泛型方法 public class GenericMethod { /*说明:这个方法是把数组的元素全部转存到集合中,但是数组中元素的类型不确定,所以定义集合泛型时使用了通配符, * 但是前面我们已经说过,泛型声明中如果有通配符?,则在这个声明指向的泛型对象中,除了null不能加入任何的对象。 * 所以c.add(o); 会报编译错误。 * 我们使用泛型方法来解决这个问题 **/ public static void fromArrayToCollection(Object[] a, Collection<?> c) { for (Object o : a) { //c.add(o); // 编译期错误:he method add(capture#1-of ?) in the type // Collection<capture#1-of ?> is not applicable for the // arguments (Object): } } /* * 泛型函数允许类型参数被用来表示方法的一个或多个参数之间的依赖关系,或者参数与其返回值的依赖关系。 * 如果没有这样的依赖关系,不应该使用泛型方法。 * **/ public static <T> void fromArrayToCollectionWithGeneric(T[] a, Collection<T> c){ for (T o : a) { c.add(o); // correct } } }
三、一些细节
package generic; import java.util.ArrayList; import java.util.List; public class ImportantThing { public static void main(String args[]){ List<String> l1 = new ArrayList<String>(); List<Integer> l2 = new ArrayList<Integer>(); System.out.println(l1.getClass() == l2.getClass());//result:true System.out.println(l1.getClass()); //result:class java.util.ArrayList System.out.println(l2.getClass()); //result:class java.util.ArrayList /* * 数组对象的组成类型不能是一个类型变量或者类型参数 * 但是可以通配符的类型 * */ // List<String>[] lsa = new List<String>[10]; //编译期错误:Cannot create a generic array of List<String> List<?>[] lsb=new ArrayList<?>[10]; } }
评论
3 楼
anderic
2014-04-29
? 的目的是给于后来的人创建类型的自由度,当你想好了类型后(比如shape),就应该明确指定类型进行申明和实例的创建了。
2 楼
jybzjf
2012-08-08
不可以,JAVA generic跟数据和兼容性不好,有泛型的地方,不能出现数组的创建,唯一合法的是楼主文章里所使用的情况:List<?>[] lsb=new ArrayList<?>[10]; 即:使用通配符的数组是可以的。
1 楼
caoming_ke
2011-10-29
三、一些细节
List<String>[] lsa = new List<String>[10]
这里可以把List new出来么?
List<String>[] lsa = new List<String>[10]
这里可以把List new出来么?
发表评论
-
Redis command
2019-07-05 09:43 0redis-cli -v : 查看redis version ... -
Spring Boot Actuator
2018-07-24 13:46 695Spring Boot : 2.0.3 POM文件中加入 ... -
关于CXF的FrontEnd和数据绑定方案
2013-06-17 11:45 1122转载自:http://blog.csdn.net/blui ... -
webservice传送XML大小估算
2013-06-06 12:22 77402013-06-06 某天,要做几个WebService, ... -
java-HashSet源码学习
2013-06-05 15:22 808HashSet: 不支持多线程 ... -
Java @override报错的解决方法 .
2013-04-28 09:59 815有时候Java的Eclipse工程换一台电脑后编译总是@ov ... -
myeclipse中的classpath .
2013-04-03 10:32 14938myeclipse中的classpath是 ... -
int i 引出JVM故事
2013-02-27 18:47 752public class TestDuanqf { ... -
java调度:(五) 用户自定义调度策略+spring+quartz
2013-02-22 18:21 0一般应该中,quartz的调度策略都是在xml配置文件中设 ... -
java内存系列:测试JDK最大内存
2013-02-22 18:09 1895JDK各个版本在不同操作系统中支持的最大内存是不一样的,但是可 ... -
日志管理(一):slf4j原理简单介绍
2013-01-24 18:44 3048转载自:http://blog.sina.com.cn/s ... -
concurrent: wai notify notifyAll
2013-01-09 10:16 831转载自:http://sishuok.com ... -
JDK5--Annotation学习:基础(二)
2012-12-04 19:56 1029转载自:http://www.iteye.com/topic/ ... -
JDK5--Annotation学习:基础(一)
2012-12-04 19:29 1097转载连接:http://www.iteye.com/topic ... -
concurrent: ThreadPoolExecutor 用法
2012-09-03 15:19 2994thread pool一般被用来 ... -
concurrent: Callable用法
2012-09-03 14:23 1282转载自: http://auguslee.iteye.com/ ... -
java调度:(六)quarts_cron表达式
2012-07-31 13:59 1251七个域要记住,从左到 ... -
java压缩----使用sun JDK压缩--中文的文件名会是乱码
2012-07-13 14:27 1282经测试,文件名为中文 ... -
java 附件
2012-07-12 15:47 0转载: java下载附件方法: Java ... -
java内存溢出
2012-05-15 10:57 5911一、问题 ...
相关推荐
- 方法级别的泛型:如`public <E> void printList(E[] elements)`,方法内的E仅在此方法内有效。 - 泛型通配符:例如`?`,表示任意类型。`List<?>`表示可以容纳任何类型的列表。 - 上界通配符:`<? extends T>`...
1. **泛型的基本概念**:解释了泛型是什么,以及如何通过使用尖括号`<>`来定义泛型类、泛型接口和泛型方法。 2. **类型参数**:介绍如何定义类型参数,例如`E`、`T`、`K`、`V`等,以及它们在泛型类和泛型方法中的...
下面我们将深入探讨Java泛型方法的概念、语法以及使用示例。 **一、泛型方法概念** 泛型方法是一种具有类型参数的方法,这些类型参数可以在方法声明时指定,并在方法体内部使用。与类的泛型类似,它们提供了编译时...
3. 泛型的引入:Java SE 5.0正式引入泛型,允许在类、接口和方法中声明参数化类型,使得编译器能够在编译时期检测类型错误,提高了代码质量。 4. 普及与优化:随着Java泛型的广泛应用,JDK 6和7对其进行了进一步...
接下来,让我们详细讨论 Java 泛型的关键字和通配符。 extends 和 super 的区别 在 Java 泛型中,extends 和 super 是两个重要的关键字,它们分别用于限定类型的上界和下界。 extends 用于限定类型的上界,表示...
6. **基本类型与泛型**:Java泛型不支持原始类型(如int、char)作为类型参数,但可以通过使用专门的通配符如`Integer[]`或`? extends Number`来间接实现。 7. **泛型和多态**:泛型类可以作为其他泛型类或非泛型类...
- 类型擦除:Java编译器会进行类型擦除,将泛型类的实例转换为无参数类型,但会在编译时进行类型检查。 3. 泛型接口: - 定义与实例化与泛型类类似,例如 `interface MyInterface<T> { ... }`,然后 `MyInterface...
"泛型讲解 类型通配符" 泛型是Java语言中的一种机制,它允许在定义类、接口时指定类型形参,这个类型形参将在声明变量、创建对象时确定。泛型的引入解决了Java集合的缺陷,即集合会“忘记”对象的类型,导致...
Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...
Java泛型是Java 5中引入的一项强大特性,它...了解泛型的原理、声明方式、类型擦除、边界以及通配符的使用,对于掌握Java编程中的高级技术至关重要。通过合理地使用泛型,我们可以构建出更加健壮和可扩展的Java应用程序
Java泛型通配符是Java编程语言中一个重要的特性,它允许我们在定义泛型类型时使用问号(?)作为占位符,表示任意类型的参数。这种通配符的使用大大提高了代码的灵活性和可复用性,同时也帮助开发者遵循强类型检查的...
通过学习这些知识点,开发者能更好地理解Java泛型的内部原理,以及如何在实际项目中充分利用泛型的特性,提高代码质量和安全性。在这个视频教程中,张孝祥老师将详细讲解这些概念,并通过实例帮助学员深入掌握Java...
泛型方法:演示如何在普通类中定义泛型方法,以及如何调用和使用泛型方法。 类型通配符:展示如何使用类型通配符来增加灵活性,以及如何进行类型边界约束。 泛型接口:演示如何定义和实现泛型接口,并通过示例代码...
Java泛型中T和问号(通配符)的区别 Java泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、...
Java 泛型总结(三):通配符的使用 通配符是 Java 泛型中一个重要的概念,它允许我们在泛型中实现向上转型,解决了泛型不支持协变的问题。本文将详细介绍通配符的使用和原理。 在 Java 中,数组是协变的,这意味...
4. 泛型通配符:使用问号`?`表示未知类型,如`List<?> list = new ArrayList();`。这样的列表不能添加元素,但可以读取。此外,还有上限通配符`<? extends SomeType>`和下限通配符`<? super SomeType>`,分别限制了...
Java 泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型接口是泛型在接口中的应用,它允许我们在接口中定义带有类型参数的方法,使得实现该接口的类可以使用不同的数据类型。下面...