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 ...
随机推荐
- CentOS6.8 编译安装LNMP
思路:根据Linux系统以及公司网站系统的信息,选择合适的安装包进行安装 一.查看系统信息 # uname -a # 查看内核/操作系统/CPU信息 # /etc/issue # 查看操作系统版本 # ...
- [C/C++标准库]_[0基础]_[怎样实现std::string自己的Format(sprintf)函数]
场景: 1. C语言有自己的sprintf函数,可是这个函数有个缺点,就是不知道须要创建多大的buffer, 这时候能够使用snprintf函数来计算大小,仅仅要參数 buffer为NULL, co ...
- 用yum源安装nginx(转)
新建一个nginx的源,/etc/yum.repos.d/nginx.repo 编辑此文件内容如下: [nginx]name=nginx repobaseurl=http://nginx.org/pa ...
- 源代码分析:onAttach, onMeasure, onLayout, onDraw 的顺序。
从前文<源代码解析:dialog, popupwindow, 和activity 的第一个view是怎么来的?>中知道了activity第一个view或者说根view或者说mDecorVi ...
- shell中的括号作用
一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...
- SpringBoot项目的云服务器部署
1.场景还原 springboot配置相当简单,人人皆知.怎么把springboot工程部署到云服务器上呢?可能有人会说,博主你前篇不是讲了java工程的云部署把:但是我想澄清一点的是,我前篇的工程都 ...
- oracle浅析导致数据库性能问题的常见原因
㈠ 不合理的大表全表扫描 详见:点击打开链接 v$session_longops视图记录了超过6秒的所有SQL语句 这其中绝大部是全表扫描的语句! ㈡ 语句共享性不好 常出没在OLTP, ...
- Window10 安装问题汇总
7月28号之后,由于没有收到windows的升级提醒,所以下载了ISO文件手动进行了升级. 本文就升级过程中遇到的问题进行一下总结: 1.ISO文件名称:cn_windows_1 ...
- Google Code Jam 2014 资格赛:Problem C. Minesweeper Master
Problem Minesweeper is a computer game that became popular in the 1980s, and is still included in so ...
- 【SoapUI、Postman、WebServiceStudio、Jmeter】接口测试工具结合测试webservice接口(发送XML格式参数)
目录: SoapUI测试webservice接口,发送XML格式参数 Postman测试webservice接口,发送XML格式参数 WebServiceStudio.exe测试webservice接 ...