读书人

泛型 通配符二

发布时间: 2013-04-02 12:35:26 作者: rapoo

泛型 通配符2
1.泛型制定的类型不一致,编译时报错

class Info<T>
{
private T var ;
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){
return this.var.toString() ;
}
}
public class GenericsDemo01
{
public static void main(String args[]){
Info<String> i = new Info<String>() ;
i.setVar("MLDN") ;
fun(i) ;
}
public static void fun(Info<Object> temp){
System.out.println("内容:" + temp) ;
}
}

D:\test\genericsdemo02>javac GenericsDemo01.java
GenericsDemo01.java:19: 错误: 无法将类 GenericsDemo01中的方法 fun应用到给定类型;

fun(i) ;
^
需要: Info<Object>
找到: Info<String>
原因: 无法通过方法调用转换将实际参数Info<String>转换为Info<Object>
1 个错误


2.?号表示,可以接收任意类型的泛型对象

class Info<T>
{
private T var ;
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){
return this.var.toString() ;
}
}
public class GenericsDemo01
{
public static void main(String args[]){
Info<String> i = new Info<String>() ;
i.setVar("MLDN") ;
fun(i) ;
}
public static void fun(Info<?> temp){
System.out.println("内容:" + temp) ;
}
}

使用?可以接收任意的内容,但是此内容却无法使用?修饰的泛型对象进行修改

3.受限泛型

设置上限:

声明对象: 类名称<?extends 类> 对象名称

声明类: 类名称<泛型标识 extends 类>{}

设置下限

声明对象: 类名称<?super 类> 对象名称

声明类: 类名称<泛型标识 extends 类>{}


设置上限:

class Info<T>
{
private T var ;
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){
return this.var.toString() ;
}
}
public class GenericsDemo02
{
public static void main(String args[]){
Info<Integer> i1 = new Info<Integer>() ;
Info<Float> i2 = new Info<Float>() ;
i1.setVar(30) ;
i2.setVar(30.2f) ;
fun(i1) ;
fun(i2) ;
}

public static void fun(Info<? extends Number> temp){
System.out.println(temp + "、") ;
}
}


设置下限:

class Info<T>
{
private T var ;
public void setVar(T var){
this.var = var ;
}
public T getVar(){
return this.var ;
}
public String toString(){
return this.var.toString() ;
}
}
public class GenericsDemo04
{
public static void main(String args[]){
Info<String> i1 = new Info<String>() ;
Info<Object> i2 = new Info<Object>() ;
i1.setVar("MLDN") ;
i2.setVar(new Object()) ;
fun(i1) ;
fun(i2) ;
}

public static void fun(Info<? super String> temp){
System.out.println(temp + "、") ;
}
}


1楼firedinner前天 21:05
+2

读书人网 >编程

热点推荐