java 泛型的简单使用
effecttive java一直推荐使用泛型,简单的看了一下泛型的使用
package cn.com.fzk; import java.util.ArrayList;
import java.util.List; public class Test1 {
public static class InnerStaticGeneric<T> {
T t;
InnerStaticGeneric<T> instance = new InnerStaticGeneric<T>(); public static <T> InnerStaticGeneric<T> getInstance() {
return new InnerStaticGeneric<T>();
}
} public static void main(String[] args) {
String a = "a";
GenericTest.w(a);
Integer b = ;
GenericTest.w(b); }
} class GenericTest<T> {
public GenericTest() {
} T t; List<T> list = new ArrayList<T>(); public void add(T t) {
list.add(t);
} public T get(int index) {
return list.get(index);
} public static <T> GenericTest<T> getInstance() {
return new GenericTest<T>();
} public static <W> void w(W w) {
System.out.println(w.getClass().getName());
} public static <Q> void q(Q q) {
System.out.println(q.getClass().getName());
} public void t(T t) {
System.out.println(t.getClass());
}
public <E> void e(E e) {
System.out.println(e.getClass());
}
}
定义泛型类的时候,<>中的类型随便写,一个大写的字母就可以。在非静态方法中使用到的泛型的类型如果和定义的泛型类的大写的那个字母一样,就不需要制定类型了。如果方法中的泛型的类型未定义需要在方法中制定类型,在e()方法中的那个<E>就是相当于临时定义了一个类型E,如果不定义编译通不过。
静态方法中如果要使用泛型,前边必须定义这个临时类型。如果泛型类中定义了静态方法,其实这个静态方法中的泛型和泛型类中定义的泛型已经没有意义了。泛型在Java中本身就是一个语法糖,在编译的时候已经编译成了实际的类型,是动态的翻译类型,而静态方法是类未编译前就已经编译了,也就是静态方法中所有的类型都是已经确定好的。在泛型类中使用静态方法用来操作我感觉是没有意义的,唯一可能的原因就是这个静态方法从理论上来说应该属于这个类(单一职责)。同时也说明,任何一个非泛型类中,都可以定义一个泛型方法。向下面这样创建一个类及方法也是可以的。这种情况下,定不定义泛型类没有什么意义。
class GenericTest {
public static <W> void w(W w) {
System.out.println(w.getClass().getName());
}
public static <Q> void q(Q q) {
System.out.println(q.getClass().getName());
}
public <E> void e(E e) {
System.out.println(e.getClass());
}
}
如果想定义一个泛型类,在使用这个泛型类并且还想让这个泛型类定义出来的泛型起作用的话那么就不要用静态方法来操作泛型,new出这个泛型类在调用相应的方法。同时说明,泛型类做不了静态方法工具类。这是我的感觉。不知道是不是有问题。
java 泛型的简单使用的更多相关文章
- 利用Java泛型实现简单的泛型方法
问题:编写一个泛型方法add(),当传入不同数字类型的值时,能够进行加法运算,(如可以传入int.long.float.double类型,但要对传入的值做一定的限定,如必须是数字). 解决:利用泛型编 ...
- JAVA泛型解释
理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: 1 List<Apple> box = ...; 2 Apple apple ...
- Java泛型简明教程
泛型是Java SE 5.0中引入的一项特征,自从这项语言特征出现多年来,我相信,几乎所有的Java程序员不仅听说过,而且使用过它.关于Java泛型的教程,免费的,不免费的,有很多.我遇到的最好的教材 ...
- 浅析Java 泛型
泛型是JavaSE5引入的一个新概念,但是这个概念在编程语言中却是很普遍的一个概念.下面,根据以下内容,我们总结下在Java中使用泛型. 泛型使用的意义 什么是泛型 泛型类 泛型方法 泛型接口 泛型擦 ...
- Java:泛型基础
泛型 引入泛型 传统编写的限制: 在Java中一般的类和方法,只能使用具体的类型,要么是基本数据类型,要么是自定义类型.如果要编写可以应用于多种类型的代码,这种刻板的限制就会束缚很多! 解决这种限制的 ...
- java泛型基础
泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 这种参数类型可以用在类.接口和方法的创建中, 分别称为泛型类.泛型接口.泛型方法. Ja ...
- 初识java泛型
1 协变数组类型(covariant array type) 数组的协变性: if A IS-A B then A[] IS-A B[] 也就是说,java中的数组兼容,一个类型的数组兼容他的子类类型 ...
- 【Java心得总结四】Java泛型下——万恶的擦除
一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...
- 【Java心得总结三】Java泛型上——初识泛型
一.函数参数与泛型比较 泛型(generics),从字面的意思理解就是泛化的类型,即参数化类型.泛型的作用是什么,这里与函数参数做一个比较: 无参数的函数: public int[] newIntAr ...
随机推荐
- css进阶读书笔记
说明:努力在十一左右,最迟双11之前掌握所有css知识要点 一.摘自<写给大家看的CSS书(第2版)>(虽然书比较旧,09年版的,但对于我这种刚入门的小菜鸟 来说,能学到的还是挺多的) 1 ...
- 工作总结 无法确定条件表达式的类型,因为“<null>”和“System.DateTime”之间没有隐式转换 解决办法 object——Nullable<T> (可空类型)
可空值类型 备注 一种类型认为是可以为 null,如果它可以分配一个值,也可以分配null,这意味着类型具有无论如何没有值. 默认情况下,所有都引用类型,如String,是否可以为 null, ...
- PHP面试题及答案解析(2)—PHP面向对象
1. 写出 php 的 public.protected.private 三种访问控制模式的区别. public:公有,任何地方都可以访问protected:继承,只能在本类或子类中访问,在其它地方不 ...
- 转:HTTP ---HTTP头的编码问题(Content-Disposition)
最近在做项目时遇到了一个 case :需要实现一个强制在浏览器中的下载功能(即强制让浏览器弹出下载对话框),并且文件名必须保持和用户之前上传时相同(可能包含非 ASCII 字符). 前一个需求很容易实 ...
- IOS与安卓的远程调试
本地调试H5页面方案总结 http://www.jianshu.com/p/a43417b28280 Fiddler 手机抓包 http://blog.csdn.net/gld824125233/ar ...
- 使用OSChina代码托管管理项目(四)
本篇主要介绍使用Eclipse的Egit插件克隆远程project到本地的操作步骤 一.在Git资源库管理视图中新建一个远程资源库位置 点击红框中button进行加入 二.输入远程资源库相关信息.选择 ...
- MySQL四:表操作
阅读目录 表介绍 一 创建表 二 查看表结构 三 数据类型 四 表完整性约束 五 修改表ALTER TABLE 六 复制表 七 删除表 八 完整性约束 九 数据类型 表介绍 表相当于文件,表中的一条记 ...
- 自动清理DataGuard备机日志
>> from zhuhaiqing.info #!/usr/bin/bash #删除DataGuard备机归档日志备份 export ORACLE_HOME=/opt/oracle/pr ...
- idea各种设置和学习
1. 去掉方法中的参数名提示 idea在Review时候的编码设置 idea在review代码的时候会会出现中文乱码,文件是GBK的,但是idea的字符集和项目的字符集都是UTF-8, 这时可以通过把 ...
- SQL_为表和列加凝视
***********************************************声明*************************************************** ...