泛型java实例_【Java学习笔记】Java6泛型实例
你若是不使用泛型,則會這樣處理數據類型不確定的問題:
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 {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashThree {
public static void main(String arg[]) {
Stash stash = new Stash();
stash.set("abcd");
String str = stash.get();
}
}
或者在賦值的時候規定:
class Stash {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashFour {
public static void main(String arg[]) {
Stash stash = new Stash();
stash.set("abcd");
String str = (String)stash.get();
}
}
要想規定某個參數是某各類及其子類的泛型,則:
class Stash {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashFive {
public static void main(String arg[]) {
Stash istash = new Stash();
Integer ten = new Integer(10);
istash.set(ten);
ten = istash.get();
Stash dstash = new Stash();
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 {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashSix {
public static void main(String arg[]) {
Stash tablestash = new Stash();
JTable table = new JTable();
tablestash.set(table);
table = tablestash.get();
Stash dstash = new Stash();
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 {
private T x;
void set(T x) {
this.x = x;
}
T get() {
return(x);
}
}
public class StashSeven {
public static void main(String arg[]) {
Stash bufstash = new Stash();
BufferedImage bufimage = new BufferedImage(50,50,0);
bufstash.set(bufimage);
bufimage = bufstash.get();
}
}
而通配符的泛型類可以使你在創建泛型類的指針時可以模糊處理:
class Stash {
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 integerstash;
integerstash = new Stash();
integerstash.set(new Integer(10));
numberstash = integerstash;
Number number = numberstash.get();
System.out.println(number.toString());
Stash doublestash;
doublestash = new Stash();
doublestash.set(new Double(3.14159));
numberstash = doublestash;
Double dnumber = (Double)numberstash.get();
System.out.println(dnumber.toString());
}
}
泛型還可以嵌套:
class Pair {
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 {
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> sp;
sp = new Stash>();
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 void gentype(T t) {
System.out.println(t.getClass().getName());
}
}
分享到:
總結
以上是生活随笔為你收集整理的泛型java实例_【Java学习笔记】Java6泛型实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么感觉今年甲流更“凶猛” 流感疫苗接
- 下一篇: java写一个搜索引擎_搜索引擎—-Ja