// 使用泛型定义的类在声明该类对象时可以根据不同的需求指定<T>真正的类型
public class Attri<T>{
private T attr;
public T getAttr(){return attr;}
public voidsetAttr(T attr){
this.attr = attr;}
public staticvoidmain(String[] args){
Attri<String> attri = new Attri<>();
attri.setAttr("属性");// attri.setAttr(1); 定义不同类型时,编译错误
System.out.println(attri.getAttr());}}
泛型的用法
类名
类型<T1, T2>
public class Attri<T1, S1>{
private T1 attr;
private S1 attr2;
public S1 getAttr2(){return attr2;}
public voidsetAttr2(S1 attr2){
this.attr2 = attr2;}
public T1 getAttr(){return attr;}
public voidsetAttr(T1 attr){
this.attr = attr;}
public staticvoidmain(String[] args) throws NoSuchFieldException {
Attri<String, Integer> attri = new Attri<String, Integer>();
attri.setAttr("属性");
attri.setAttr2(2);}
// 定义接口书籍
public interface Book {
public String getBookName();}// 定义小说类,并实现于书籍类
public class Novel implements Book {
@Override
public String getBookName(){return"小说";}}
public class Attri<T extends Book>{
public T book;
public staticvoidmain(String[] args){
Novel novel = new Novel();
Attri<Novel> attri = new Attri<>();
attri.setBook(novel);
Novel book1 = attri.getBook();
System.out.println(book1.getBookName());}
public T getBook(){return book;}
public voidsetBook(T book){
this.book = book;}}
使用通配符
语法 类名<? extend 父类> 或者 向上限制类型 类名<? extend 子类>// 在上面示例上,增加 Biography传记的实现类,即可实现通配符向下约束类型
public class Attri<T extends Book>{
public staticvoidmain(String[] args){
Attri<? extends Book> attri = null;
attri = new Attri<Novel>();
attri = new Attri<Biography>();}}// 使用super关键字 即可在泛型中约束向上的类型
public class Attri<T extends Book>{
public staticvoidmain(String[] args){
Attri<? super Novel> attri = null;
attri = new Attri<Book>();// attri = new Attri<Biography>();// 编译错误 Biography 不是Novel的父类}}
继承和实现泛型
public class Attri<T1, T2, T3> extends Attri2<T1> implements Novel<T2>{
T1 n1;
T2 n2;
T3 n3;
public Attri(){}
public Attri(T1 n1, T2 n2, T3 n3){
this.n1 = n1;
this.n2 = n2;
this.n3 = n3;}
@Override
public T2 getBookName(T2 t2){return t2;}
public staticvoidmain(String[] args){
Attri<String, String, String> attri = new Attri<>();
String bookName = attri.getBookName("2");
System.out.println(bookName);}