你若是不使用泛型,则会这样处理数据类型不确定的问题:
class Stash {
private Object x;
void set(Object x) {
this.x = x;
}
Object get() {
return(x);
}
}
public class StashOne {
public static void main(String arg[]) {
Stash stash = new Stash();
stash.set("abcd");
String str = (String)stash.get();
}
}
使用了泛型则:
class StashString {
private String x;
void set(String x) {
this.x = x;
}
String get() {
return(x);
}
}
public class StashTwo {
public static void main(String arg[]) {
StashString stash = new StashString();
stash.set("abcd");
String str = stash.get();
}
}
你也可以在创建对象的时候规定类型:
class Stash<T> {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashThree {
public static void main(String arg[]) {
Stash<String> stash = new Stash<String>();
stash.set("abcd");
String str = stash.get();
}
}
或者在赋值的时候规定:
class Stash<T> {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashFour {
public static void main(String arg[]) {
Stash<Object> stash = new Stash<Object>();
stash.set("abcd");
String str = (String)stash.get();
}
}
要想规定某个参数是某各类及其子类的泛型,则:
class Stash<T extends Number> {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashFive {
public static void main(String arg[]) {
Stash<Integer> istash = new Stash<Integer>();
Integer ten = new Integer(10);
istash.set(ten);
ten = istash.get();
Stash<Double> dstash = new Stash<Double>();
Double pi = new Double(3.14159);
dstash.set(pi);
pi = dstash.get();
}
}
对于接口:
import java.util.EventListener;
import javax.swing.JTable;
import javax.swing.undo.UndoManager;
class Stash<T extends EventListener> {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashSix {
public static void main(String arg[]) {
Stash<JTable> tablestash = new Stash<JTable>();
JTable table = new JTable();
tablestash.set(table);
table = tablestash.get();
Stash<UndoManager> dstash = new Stash<UndoManager>();
UndoManager unman = new UndoManager();
dstash.set(unman);
unman = dstash.get();
}
}
而你要是想既规定类又规定实现了某一个接口,那么:
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.Transparency;
class Stash<T extends Image & Transparency> {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashSeven {
public static void main(String arg[]) {
Stash<BufferedImage> bufstash = new Stash<BufferedImage>();
BufferedImage bufimage = new BufferedImage(50,50,0);
bufstash.set(bufimage);
bufimage = bufstash.get();
}
}
而通配符的泛型类可以使你在创建泛型类的指针时可以模糊处理:
class Stash<T> {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashEight {
public static void main(String arg[]) {
Stash<? extends Number> numberstash;
Stash<Integer> integerstash;
integerstash = new Stash<Integer>();
integerstash.set(new Integer(10));
numberstash = integerstash;
Number number = numberstash.get();
System.out.println(number.toString());
Stash<Double> doublestash;
doublestash = new Stash<Double>();
doublestash.set(new Double(3.14159));
numberstash = doublestash;
Double dnumber = (Double)numberstash.get();
System.out.println(dnumber.toString());
}
}
泛型还可以嵌套:
class Pair<T,U> {
private T left;
private U right;
Pair(T l, U r) {
left = l;
right = r;
}
public T getLeft() {
return(left);
}
public U getRight() {
return(right);
}
}
class Stash<T> {
private T t;
void set(T t) {
this.t = t;
}
T get() {
return(t);
}
}
public class Nesting {
@SuppressWarnings("unchecked")
public static void main(String arg[]) {
Stash<Pair<String,Long>> sp;
sp = new Stash<Pair<String,Long>>();
Pair pair = new Pair("Average",new Long(320));
sp.set(pair);
pair = sp.get();
System.out.println(pair.getLeft() + " " + pair.getRight());
}
}
另外泛型不只是类,方法也可以泛型:
import java.awt.Color;
public class GenericMethod {
public static void main(String arg[]) {
GenericMethod gm = new GenericMethod();
gm.objtype("abcd");
gm.gentype("abcd");
gm.objtype(Color.green);
gm.gentype(Color.green);
}
public void objtype(Object t) {
System.out.println(t.getClass().getName());
}
public <T> void gentype(T t) {
System.out.println(t.getClass().getName());
}
}
分享到:
相关推荐
这份“Java JDK 6学习笔记——ppt简体版”涵盖了Java语言的核心概念、语法特性以及JDK 6的新功能,旨在帮助初学者和有经验的开发者深入理解并掌握这一版本的Java开发环境。 首先,Java JDK 6的安装与配置是学习的...
"Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...
理解类的定义、对象的实例化以及接口的使用是Java学习的基础。 2. 数据类型:Java有两类数据类型,基本类型和引用类型。JDK 6对这些类型进行了优化,使得程序性能有所提升。 3. 控制结构:包括条件语句(if、switch...
良葛格的《Java JDK5.0学习笔记》是一本面向初学者的教程,旨在帮助读者掌握这个版本的核心概念和技术。以下是基于该书部分内容的知识点详解: 1. **泛型**:JDK 5.0引入了泛型,这是一种强大的类型系统增强,允许...
这份"个人学习的java笔记——思维导图"涵盖了上述诸多Java编程的核心知识点,通过思维导图的方式,使得学习者可以更直观地理解和记忆这些复杂的概念,对提升Java学习效果大有裨益。无论你是初学者还是有经验的开发者...
著作:《java jdk 5.0学习笔记》、《java se 6技术手册》、《spring技术手册》等 译作:《ajax实战手册》、《jquery实战手册(第2版)》 个人网站:http://openhome.cc 目录 《java jdk 7学习笔记》 chapter1 ...
Java JDK 5.0是Java发展历程中的一个重要里程碑,它引入了许多新特性,极大地提升了开发效率和代码质量。..."良葛格Java JDK 5.0学习笔记"这份资料应该会详细解释这些概念,为初学者提供宝贵的参考资料。
### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...
**Java学习笔记——Java SE基本知识** Java是一种广泛使用的面向对象的编程语言,以其跨平台、安全性高和可移植性而闻名。Java Standard Edition(Java SE)是Java平台的基础,它提供了开发和运行桌面应用程序、...
在"Java JDK 6学习笔记——ppt简体版"中,你将系统地了解到以下几个关键知识点: 1. **基础语法**:包括数据类型、变量、控制结构(如if、switch、for、while循环)、方法、类与对象等Java语言的基本元素。 2. **...
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...
《良葛格Java JDK 5.0学习笔记》是一份详尽的教程资源,旨在帮助开发者深入理解并掌握Java开发工具包(Java Development Kit)的第5个主要版本——JDK 5.0。这份笔记涵盖了JDK 5.0中的核心特性、改进和新功能,是...
类和对象的概念,以及如何创建和使用它们,都是Java学习的重点。 3. **类与对象**:类是对象的蓝图,它定义了对象的属性和行为。理解类的构造函数、方法、访问修饰符(public、private、protected)以及static...
【李兴华java word版全部笔记】是一份详尽的Java学习资料集合,由知名教师李兴华精心编撰而成。这份文档集包含了Java语言的各个核心知识点,旨在帮助学习者系统地理解和掌握Java编程技术。由于全部采用Word格式,...
Java小笔记——深入理解J2SE中的泛型与封装 在Java编程中,J2SE(Java Standard Edition)是核心部分,提供了丰富的API和功能。本文将重点讨论J2SE中的一个重要特性——泛型(Generics),以及封装的概念。泛型是...
### Java学习笔记精要 #### 一、面向对象的基础与集合框架 面向对象是Java的核心概念,它将现实世界中的实体抽象为类和对象,强调数据封装、继承和多态性。集合框架则是用于存储和操作集合数据的重要工具,包括`...
"Java笔记(新手必备)"是一份专为初学者准备的学习资源,它将Java的基础知识以易读、易懂的方式进行了整理,旨在帮助新手快速入门并掌握Java编程。 首先,我们要了解Java的基础——J2SE 5.0。J2SE(Java Standard ...