这篇我将在上篇的基础上进行实例编程讲解,也就不多说废话了,直接进入编程,剖析java的多种泛型类型。
By--何泽江(KJ Internationl company)
package demoTest;
/**
* 普通泛型类
* @author <href a="mailto:hezj@china.kjlink.com"> hezejiang</href>
*
*/
public class GenericDemoTest1 {
public static void main(String args[]){
VariebleS s = new VariebleS();
s.setVar("string");
System.out.print(s.getVar().length());
}
}
class VariebleS {
private String var;
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}
}
package demoTest;
/**
* 普通泛型类
* @author <href a="mailto:hezj@china.kjlink.com"> hezejiang</href>
*
*/
public class GenericDemoTest2 {
public static void main(String args[]){
NotePad<Long, String> pad = null;
pad = new NotePad<Long, String>();
pad.setKey(111L);
pad.setValue("hezejiang@china.kjlink.com");
System.out.println("key= "+pad.getKey()+"value= "+pad.getValue());
}
}
class NotePad<K, V> {
private K key;
private V value;
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
}
package demoTest;
/**
* 通配符
*
* @author <href a="mailto:hezj@china.kjlink.com"> hezejiang</href>
*
*/
public class GenericDemoTest3 {
public static void main(String args[]){
Info<String> info = new Info<String>();
info.setVar("hezj@china.kjlink.com");
fun(info);
}
public static void fun(Info<?> temp){//此方法可接受任意泛型对象
System.out.println(temp);
}
}
class Info<T> {
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
public String toString(){
return this.var.toString();
}
}
package demoTest;
/**
* 受限泛型
* @author <href a="mailto:hezj@china.kjlink.com"> hezejiang</href>
*
*/
public class GenericDemoTest4 {
public static void main(String args[]){
Infoo<Integer> oo = new Infoo<Integer>();//泛型为Integer
Infoo<Float> ooo = new Infoo<Float>(); //泛型为Float
Infoo<Long> oooo = new Infoo<Long>(); //泛型为Long
Infoo<Double> ooooo = new Infoo<Double>();//泛型为Double
oo.setVar(11);
ooo.setVar(11.1f);
oooo.setVar(11L);
ooooo.setVar(11.1);
fun(oo);
fun(ooo);
fun(oooo);
fun(ooooo);
}
public static void fun(Infoo<? extends Number> temp){
System.out.println(temp);
}
}
class Infoo<T> {
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
public String toString(){
return this.var.toString();
}
}
package demoTest;
/**
* 受限泛型
* @author <href a="mailto:hezj@china.kjlink.com"> hezejiang</href>
*
*/
public class GenericDemoTest5 {
public static void main(String args[]){
Infooo<String> oo = new Infooo<String>();//泛型为String
Infooo<Object> ooo = new Infooo<Object>(); //泛型为Object
oo.setVar("hezj@china.kjlink.com");
ooo.setVar(new Object());
fun(oo);
fun(ooo);
}
public static void fun(Infooo<? super String> temp){
System.out.println(temp);
}
}
class Infooo<T> {
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
public String toString(){
return this.var.toString();
}
}
package demoTest;
/**
* 泛型不能向上转型
* @author <href a="mailto:hezj@china.kjlink.com"> hezejiang</href>
*
*/
public class GenericDemoTest6 {
public static void main(String args[]){
Infooo<String> oo = new Infooo<String>();//泛型为String
Infooo<Object> ooo = null; //泛型为Object
ooo = oo ; //向上转型出错
}
}
class Infoooo<T> {
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
public String toString(){
return this.var.toString();
}
}
package demoTest;
/**
* 数组泛型
* @author <href a="mailto:hezj@china.kjlink.com"> hezejiang</href>
*
*/
public class GenericDemoTest7 {
public static void main(String args[]){
Integer i[] = fun1(1,2,3,4,5,6);
fun2(i);
}
public static <T> T[] fun1(T...arg){//接收可变参数
return arg; //return out
}
public static <T> void fun2(T param[]){//输出
System.out.println("接收泛型数组");
for(T t : param){
System.out.println(t + "、");
}
}
}