- 浏览: 991116 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (223)
- JDBC技术 (29)
- Java Base (21)
- SSH框架的集合 (5)
- Javascript部分 (16)
- Sping2.5框架 (6)
- Hibernate框架 (19)
- JDBC中的数据库连接 (5)
- Ajax技术应用 (9)
- Java工具包下载 (3)
- Database (4)
- Java Web (13)
- 我的生活 (4)
- Struts2 (25)
- S2SH (1)
- Prototype (1)
- jfreeChart (5)
- JPA (7)
- JBPM (1)
- JasperReport (6)
- DWR (1)
- freeMark (2)
- IBatis (2)
- FCKeditor (2)
- POI (1)
- JQuery (6)
- JSON (1)
- JavaMail (3)
- Flex (2)
- CSS收藏夹 (1)
- 润乾报表 (2)
- 开源技术 (1)
- Android (2)
- Android_UI (1)
- Android_OS (6)
- Android_OpenLibs (3)
- Volley (1)
- JS_OpenLibs (1)
- Hessian (3)
- OS (1)
最新评论
-
damoluomu:
简单易懂
Java Web开发Session超时设置 -
di1984HIT:
学习了~~~~~~
Java Web开发Session超时设置 -
lord_is_layuping:
...
Java Web开发Session超时设置 -
15111285554:
...
Java Web开发Session超时设置 -
sfg1314:
暂停后重新下载就会报错:ClientAbortExceptio ...
Java Web 文件下载之断点续传
/** * JDK1.5 泛型 * * @author 张明学 * */ public class GenericStudy { @SuppressWarnings( { "unchecked", "unused" }) public static void main(String[] args) throws Exception { // 第1点:Java的泛型仅仅只是通用Java的编译器实现的,进行全安检查,编译成class文件后没有保留泛型信息 Collection<Integer> c1 = new ArrayList<Integer>(); Collection<String> c2 = new ArrayList<String>(); // 1.1 获取c1与c2的字节码看是否相同 System.out.println("c1与c2的字节码是否相同:" + (c1.getClass() == c2.getClass()));// true c1.add(23); // 1.2 通用反射我们可以向c1中添加String类型的数据(class文件没有任何泛型) Class clazz = c1.getClass(); Method collAddMethod = clazz.getMethod("add", Object.class); collAddMethod.invoke(c1, "http://zmx.iteye.com"); for (Object obj : c1) { System.out.println(obj); } // 泛型中的?通配符:表示任何类型,它与Object是有区别的如下所示: // collection1可以存放任保类型,而collection2则只能放在Object类型 Collection<?> collection1 = new ArrayList<String>(); collection1 = new ArrayList<Integer>(); collection1 = new ArrayList<Object>(); Collection<Object> collection2 = new ArrayList<Object>(); // 泛型中的向上或向下限定 // collection3表示它可以存放Number或Number的子类 Collection<? extends Number> collection3 = null; collection3 = new ArrayList<Number>(); collection3 = new ArrayList<Double>(); collection3 = new ArrayList<Long>(); // collection4表示它可以存放Integer或Integer的父类 Collection<? super Integer> collection4 = null; collection4 = new ArrayList<Object>(); // 泛型简单使用(Map.Entry是Map的一个内部类,表法Map中存在的一个对象) Map<String, Integer> testMap = new HashMap<String, Integer>(); testMap.put("xiaobojava", 2); testMap.put("mengya", 3); testMap.put("zmx", 6); Set<Map.Entry<String, Integer>> entrySet = testMap.entrySet(); for (Map.Entry<String, Integer> entry : entrySet) { System.out.println(entry.getKey() + ":" + entry.getValue()); } // 自定义泛型 String[] a = { "aa", "bb", "cc" }; swap(a, 1, 2); Integer[] b = { 32, 45, 67 }; swap(b, 1, 2); // 泛型中的类型不能为基本数据类型(如下就不行) int[] c = { 1, 3, 5 }; // swap(c,1,2); Vector<Date> v1 = new Vector<Date>(); // 由于泛型是由编译器实现的语法检查,编译成class文件后没有保留泛型信息,但可以根据Method获取 Method applyMethod = GenericStudy.class.getMethod("applyVector", Vector.class); // getGenericParameterTypes()按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method // 对象所表示的方法的形参类型的。 Type[] type = applyMethod.getGenericParameterTypes(); // ParameterizedType extends Type ParameterizedType pType = (ParameterizedType) type[0];// applyVector只用一个参数 // getRawType()返回 Type 对象,表示声明此类型的类或接口 System.out .println("getRawType()方法:表示声明此类型的类或接口是:" + pType.getRawType()); // getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。 System.out.println("getActualTypeArguments()方法:实际类型参数的 Type 对象" + pType.getActualTypeArguments()[0]);// Vector<Date>只用一个Date类型 } public static void applyVector(Vector<Date> v1) { } public static void printCollection(Collection<?> collection) { for (Object obj : collection) { System.out.println(obj); } } /** * 自定义泛型一个泛型方法 * * @param <T> * 表示自己定义的一个泛型类型(T不能是基本数据类型) * @param a * T类型的数组 * @param m * T类型的数组m位置 * @param n * T类型的数组n位置 */ public static <T> void swap(T[] a, int m, int n) { T temp = a[n]; a[n] = a[m]; a[m] = temp; } /** * 将某个类型的数组元素copy到这个类型集合 * * @param <T> * 表示自己定义的一个泛型类型(T不能是基本数据类型) * @param a * 集合 * @param b * 数组 */ public <T> void copyArray2Collection(Collection<T> a, T[] b) { } }
/** * 泛型DAO接口 * * @author 张明学 * */ public interface GenericDAO<E> { /** * 持久化一个对象 * * @param entity * 实体对象 */ public void save(E entity); /** * 根据主键查询一个实体对象 * * @param id * 主键 * @return */ public E queryByPk(Integer id); /** * 删除一个实体对象 * * @param entity */ public void delete(E entity); /** * 删除一个实体对象 * * @param id * 主键 */ public void delete(Integer id); /** * 修改一个实体对象 * * @param entity */ public void update(E entity); /** * 查询一个实体对象集合 * * @return */ public List<E> queryList(); }
评论
1 楼
mercyblitz
2010-05-31
引用
# // 1.1 获取c1与c2的字节码看是否相同
# System.out.println("c1与c2的字节码是否相同:" + (c1.getClass() == c2.getClass()));// true
# System.out.println("c1与c2的字节码是否相同:" + (c1.getClass() == c2.getClass()));// true
在运行时擦鞋,模板参数类型不会保存在运行时。
引用
# // 泛型中的?通配符:表示任何类型,它与Object是有区别的如下所示:
# // collection1可以存放任保类型,而collection2则只能放在Object类型
# Collection<?> collection1 = new ArrayList<String>();
# collection1 = new ArrayList<Integer>();
# collection1 = new ArrayList<Object>();
# Collection<Object> collection2 = new ArrayList<Object>();
java.lang.String is not java.lang.Object?不能放String吗?你确定?
引用
# // 自定义泛型
# String[] a = { "aa", "bb", "cc" };
# swap(a, 1, 2);
# Integer[] b = { 32, 45, 67 };
# swap(b, 1, 2);
# // 泛型中的类型不能为基本数据类型(如下就不行)
# int[] c = { 1, 3, 5 };
# // swap(c,1,2);
泛型的限制,不能申明为数组。
public static void swap(Object[] src,int a,int b){ ... }
这么申明就可以了,和泛型关系不大。
发表评论
-
HttpURLConnection附件上传
2015-05-15 18:25 3416整合了一个自己写的采用Http做附件上传的工具,分享一下! ... -
java自带线程池和队列详细讲解
2014-11-29 16:39 8513Java线程池使用说明 一简介 线程的使用在java中占 ... -
使用CGLIB的代理技术
2010-06-09 19:04 1538import java.lang.reflect.Method ... -
使用反射和注解模拟Spring的依赖注入
2010-06-09 19:00 4511作为一个应用Java的反射和注解的一个使用。 首简写一个XM ... -
Java基础十:JDK 动态代理类分析(java.lang.reflect.Proxy使用)
2010-05-28 19:25 4139/** * JDK 动态代理类分析(java.lang.r ... -
Java基础九:Java中的类加载器说明,可以对class文件加密,自定义ClassLoader
2010-05-28 19:22 3705/** * Java 类加载器 * * @aut ... -
Java基础七:注解Annotation使用说明
2010-05-28 19:14 4021import java.lang.annotation.Ele ... -
Java基础六:apache的Beanutils简单使用对JavaBean操作的封装
2010-05-28 19:08 2186/** * apache的Beanutils简单使用 ... -
Java基础五:内省(对JavaBean的操作)
2010-05-28 19:05 2375/** * Person JavaBean * ... -
Java基础四: 反射(构造方法,成员变量,普通方法,数组)
2010-05-28 18:58 5779/** * 反射(构造方法,成员变量,普通方法,数组) ... -
Java基础三: 枚举高级应用(向枚举值对象中添加变量和方法)
2010-05-28 18:45 3858/** * JDK1.5 枚举高级应用(向枚举值对象中添加 ... -
Java基础二: hashCode的作用简要说明,可能导致对象在集合中无法删除
2010-05-28 18:30 1641import java.util.ArrayList; im ... -
Java基础一: 自动装箱,折箱、静态导入、可变参数
2010-05-28 18:24 1625自动装,折箱 /** * JDK1.5 自动装箱,折箱 ... -
apache StringUtils常见用法说明
2009-10-28 17:24 44371.空字符串检查使用函数: StringUtils.isBla ... -
产生随机字符串(a-z A-Z 0-9)
2009-09-25 17:47 3133实现方法一: public class RandomFile ... -
计算离当前日期之前或之后任意天的日期
2009-06-18 13:33 1503/** * 日期计算 * * @author z ... -
计算Java日期Date,DateFormat,GregorianCalendar的使用
2009-06-16 17:09 17966概要 不管你是处理财务交易还是计划着下一步的行动,你都要知 ... -
Java计算日期今天,昨天,上周,上月
2009-06-16 16:53 8438功能:今天,昨天,本周,上周,本月,上月 范围:以周一作为一 ... -
@SuppressWarnings(unchecked)作用解释.doc
2009-05-13 09:17 34641解释一: 屏蔽某些编译时的警告信息 ... -
JDK实现AOP动态代码
2009-04-20 14:29 62代理类: import java.lang.refle ...
相关推荐
Java泛型的一个重要应用是在集合框架中。在JDK 1.5之前,Java集合类框架使用Object作为元素类型,这意味着集合可以存储任何类型的对象。然而,这种设计导致在从集合中获取元素时必须进行类型转换,这个过程是繁琐且...
类型通配符: 1. 定义:使用问号 `?` 作为类型通配符,例如 `List<?>`。 2. 作用:表示各种泛型的父类,例如 `List<String>` 和 `List<Integer>` 都是 `List<?>` 的子类。 3. 限制:不能向类型通配符集合中添加元素...
5. 类型通配符:类型通配符用于表示一个未知的类型边界,例如`?`。可以指定类型通配符的上限(如`<? extends Number>`)和下限(如`<? super Integer>`),来限制可以接受的类型范围。 泛型带来的好处主要包括: -...
- 泛型通配符:例如`?`,表示任意类型。`List<?>`表示可以容纳任何类型的列表。 - 上界通配符:`<? extends T>`限制了只能传入T或T的子类类型的对象。 - 下界通配符:`<? super T>`限制了只能传入T或T的父类类型...
java基础-泛型通配符
Java泛型通配符是Java编程语言中一个重要的特性,它允许我们在定义泛型类型时使用问号(?)作为占位符,表示任意类型的参数。这种通配符的使用大大提高了代码的灵活性和可复用性,同时也帮助开发者遵循强类型检查的...
泛型和通配符是Java编程中的重要概念,它们在处理类型安全和代码复用方面起着关键作用。本文将深入探讨这两个主题,并提供一些常见的面试题,帮助开发者理解和掌握这些知识点。 首先,我们来理解泛型。泛型是Java 5...
Java泛型在运行时会被擦除,因此泛型不提供运行时的类型检查。所有的泛型类和方法都会有一个没有泛型的等价形式,这个过程称为类型擦除。 4. **通配符的使用**: - 无界通配符:`?`,表示类型参数可以是任何类型...
5. 通配符:在某些情况下,我们不需要知道确切的类型,而是希望接受任意类型的对象。这时可以使用通配符,如 `?`。例如,`acceptList(List<?> list)` 方法可以接受任何类型列表。 6. 类型擦除:Java 泛型的实现基于...
Java基础泛型是Java编程语言中的一个重要特性,它允许在类、接口和方法中使用类型参数,从而增强了代码的类型安全性和重用性。在Java中,泛型的主要目标是提高效率,避免运行时的类型转换,并且在编译时期就能发现...
### Java中的泛型 #### 什么是泛型? 泛型是Java SE 5.0中引入的一项新特性,它允许在程序设计中使用参数化类型,从而实现类型安全的集合类和其他容器类。在使用泛型之前,Java程序员通常依赖于Object类型作为通用...
泛型是Java编程语言的一个重要特性,它引入了类型安全,提高了代码的可读性和可维护性。通过反射与泛型相结合,开发者可以动态地操作带有泛型的类和对象,这对于框架设计和复杂业务逻辑尤为有用。 首先,我们要理解...
Java 泛型详解 Java 中的泛型是 Java 5(JDK 1.5)中引入的一项新特性,旨在解决类型安全和代码重用的问题。泛型允许程序员对类型进行抽象,使得代码更加灵活和可维护。 泛型的优点: 1. 类型安全:泛型可以在...
5. **泛型通配符**:?通配符用于表示任意类型。例如,`List<?> list = new ArrayList();` 这里的?表示list可以接受任何类型的列表。上限通配符`<? extends T>`和下限通配符`<? super T>`则限制了可以使用的具体类型...
4. 通配符:?表示任意类型,如`List<?>`表示包含任意类型的列表。上界通配符`? extends T`表示类型为T或T的子类,下界通配符`? super T`表示类型为T或T的父类。 三、类型擦除 Java泛型的实现基于类型擦除。在编译...
4. **基本类型参数**: Java泛型不能直接接受基本类型(如int、char),但可以通过创建对应的包装类(如Integer、Character)来使用。 5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List<? ...
Java 5 泛型是Java编程语言中一个重要的里程碑,它引入了类型安全的集合,大大增强了代码的可读性和可维护性。泛型在Java 5中首次亮相,为开发者提供了一种方式来限制集合(如List、Set、Map等)中可以存储的数据...
5. 泛型通配符:`?`代表任意类型,但通常有上下界限制,如`List<?> list`表示列表可能包含任意类型的元素,而`List<? extends Number> list`则表示列表中的元素必须是Number或其子类。 6. 级联泛型:如`List...