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 + "、") ;
}
}