例項解釋介面、泛型、比較器使用
提示:
本例子目的是對參加短跑比賽的所有動物進行排名
第一步:所有的動物都應該有一個提供速度的方法
因此直接定義在介面Animal中定義,之後讓每一個
參加比賽的動物都實現這一介面即可
Animal介面:
public interface Animal {
public int speed();
}
參加比賽的所有動物:
豬:
public class Pig implements Animal {
@Override
public int speed() {
return 20;
}
}
狗:
public class Dog implements Animal {
@Override
public int speed() {
// TODO Auto-generated method stub
return 50;
}
}
鷹 :
public class Eagle implements Animal {
@Override
public int speed() {
return 100;
}
}
比賽的規則是比較速度,速度快的在前面,所以
需要定義一個比較器:
排名比較器:
public class Rank<T extends Animal> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
//這裡乘以-1是為了倒敘排序
return (o1.speed()-o2.speed())*-1;
}
}
重點在於所有參與排名的動物都是要參加比賽的動物,所有參加比賽的
動物都是要實現Animal介面的,為了讓不同的動物之間可以進行比較,
我們就需要規定可以在比較器裡面進行比較的物件必須要實現Animal的
介面,因為比較器正是呼叫的比較物件的共同方法/屬性進行比較的。
比賽類:
public class Game {
public static void main(String[] args) {
//在它們加入到TreeSet的時候提供了比較的介面
//這樣在它們被加進去的時候就已經排好序了
TreeSet<Animal> ts=new TreeSet<Animal>(new Rank<Animal>());
ts.add(new Dog());
ts.add(new Pig());
ts.add(new Eagle());
Iterator<Animal> it=ts.iterator();
while(it.hasNext()) {
Animal a=it.next();
System.out.println("動物的型別: "+a.getClass().getName()+"\t奔跑速度: "+a.speed());
}
}
}
比賽結果:
public class Game {
public static void main(String[] args) {
//在它們加入到TreeSet的時候提供了比較的介面
//這樣在它們被加進去的時候就已經排好序了
TreeSet<Animal> ts=new TreeSet<Animal>(new Rank<Animal>());
ts.add(new Dog());
//ts.add(new Person());
ts.add(new Pig());
ts.add(new Eagle());
Iterator<Animal> it=ts.iterator();
int rank=1;
while(it.hasNext()) {
Animal a=it.next();
System.out.println("動物的型別: "+a.getClass().getName()+"\t奔跑速度: "+a.speed()+"\t排名第: "+rank);
rank++;
}
}
}
比賽結果:
動物的型別: chapter15.sub5.Pig 奔跑速度: 20 排名第: 1
動物的型別: chapter15.sub5.Dog 奔跑速度: 50 排名第: 2
動物的型別: chapter15.sub5.Eagle 奔跑速度: 100排名第: 3
相關文章
- Go中泛型和反射比較指南Go泛型反射
- Java中建立泛型型別的例項Java泛型型別
- TypeScript 泛型介面和泛型類TypeScript泛型
- 介面即泛型泛型
- 抽象類 & 介面比較抽象
- Oracle date 型別比較和String比較Oracle型別
- Java & Go 泛型對比JavaGo泛型
- 比較重要的例題
- JAVA中的Comparable介面和自定義比較器Java
- Java 介面實現多型 -- 膝上型電腦綜合例項Java多型
- 設計模式例項講解 - 介面隔離設計模式
- TS系列之介面/類/泛型泛型
- python使用泛型Python泛型
- 阿里雲共享型雲伺服器xn4 例項詳解阿里伺服器
- Java 比較器Java
- php型別比較表PHP型別
- SQL觸發器例項講解SQL觸發器
- 使用帶型別判斷的比較判斷型別
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 獲取Spring容器中Bean例項的工具類(Java泛型方法實現)SpringBeanJava泛型
- Java中如何使用泛型實現介面中的列表集合?Java泛型
- TS類,介面,泛型的簡介泛型
- TypeScript學習(四)—— 介面和泛型TypeScript泛型
- Java 泛型詳解Java泛型
- 泛型使用場景泛型
- 泛型物件的使用泛型物件
- Go 官方出品泛型教程:如何開始使用泛型Go泛型
- 用圖表和例項解釋 Await 和 AsyncAI
- Python裝飾器例項講解(三)Python
- [C++] 自定義C++比較器比較大小C++
- MySQL共享鎖:使用與例項詳解MySql
- 阿里雲伺服器計算網路增強型例項和通用網路增強型例項區別?阿里伺服器
- msfvenom使用例項
- pinctrl使用例項
- expect使用例項
- 泛型類、泛型方法及泛型應用泛型
- python3+requests+unittest介面自動化例項講解Python
- kotlin之泛型的使用Kotlin泛型
- Java泛型理解與使用Java泛型