Javaコールバック(callback)内部クラス(innerclass)
/**
*
*/
public class Animal {
private String name;
private int leg;//
private int weight;//
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLeg() {
return leg;
}
public void setLeg(int leg) {
this.leg = leg;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
import java.util.List;
/**
*
*/
public class Zoo {
private String name;
private List<Animal> animalList;
/**
*
* @return
*/
public int calculateWeight(){
return calculateTotal(new CallBack(){
public int getAmount(Animal animal) {
return animal.getWeight();
}
});
}
/**
*
* @return
*/
public int calculateLegs(){
return calculateTotal(new CallBack(){
public int getAmount(Animal animal) {
return animal.getLeg();
}
});
}
/**
* calculateTotal , ,
* javascrip ,
*/
interface CallBack {
int getAmount(Animal animal);
}
/**
*
* @param callBack
* @return
*/
private int calculateTotal(CallBack callBack){
int total = 0;
for (Animal animal : animalList) {
total = total + callBack.getAmount(animal);
}
return total;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Animal> getAnimalList() {
return animalList;
}
public void setAnimalList(List<Animal> animalList) {
this.animalList = animalList;
}
}
動物園の中に動物の群れがあると仮定して、私たちは動物の重量を統計する機能をしなければなりません.例えばcalculateWeight、動物の足の数を統計する方法をしなければなりません.その統計計算法は同じです.この場合、callbackを書いて、完成することができます.便利のために、直接内部クラスインタフェースを書いて、javaが閉パッケージ機能があれば、このインタフェースを定義する必要はありません:)