在java中,泛型用于解决向下转型问题。泛型可以应用在,方法中,类中与接口中
JAVA在方法中的应用
package lianxi;
class Num<T>{
private T number;
public void setNumber(T number) {
this.number=number;
}
public T getNumber() {
return number;
}
@Override
public String toString() {
return "Num [number=" + number + "]";
}
}
public class Test{
public static void main(String args[]) {
Num<String> num=new Num<String>();
num.setNumber("1f");
System.out.println(num.getNumber());
getString1(num);
System.out.println(num.getNumber());
getString2(num);
System.out.println(num.getNumber());
}
public static void getString1(Num<String> num) {
num.setNumber("2");
}
public static void getString2(Num<? super String> num) {
num.setNumber("3");
}
public static void getString3(Num<? extends Object> num) {
num.setNumber("3");
}
}
解释:此时,若方法(getString)中的参数的泛型为<? extends 类名>时,则不可以对类内部的成员变量进行修改,只能进行访问。若不使用泛型。默认为Object
##JAVA在接口中的应用
对于泛型接口的实现方式有两种:
- 继续使用泛型。
- 直接为父接口设置类型
eg:
package lianxi;
interface A<T>{
public void print();
}
class B implements A<String>{
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("执行完成");
}
}
class C<P> implements A<P>{ //只要接口字母与类字母一样即可
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println("执行完成2");
}
}
public class Test{
public static void main(String args[]) {
new C<Integer>().print();
}
}
JAVA在类中的应用
package lianxi;
class Num<T extends Number>{
private T number;
public void setNumber(T number) {
this.number=number;
}
public T getNumber() {
return number;
}
}
public class Test{
public static void main(String args[]) {
Num<Float> num=new Num<Float>();
num.setNumber(1f);
System.out.println(num.getNumber(
注:
?extends 类名:设置下限
? super 类名:设置上限