编程已经有一段时间,主要做Android开发,经常使用的是Java语言,在编程上,应该是三流水准,属于不求甚解的那种,所以很多基础东西掌握并不扎实,下面记载一下经常看到,但自己编程上很少想到的一种interface用法;
通常自己开发中使用interface主要用做回调,返回值通常为空,那如果返回值不为空的情况,其实可以看做是将方法作为参数在使用,从而让代码更加灵活;
假设有个Person类,要获取不同年龄的person,而这个条件可能是年龄大于20,还有可能是年龄在10~15之间,如果按照普通的方式去实现,则需要写两个不同的方法,方法一传一个参数,方法二传两个参数;那现在使用接口就可以通过一个接口方法来实现;
public class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void print(){
System.out.println("age = "+age +" name = "+name);
}
}
public class TestInterface {
public void getAge(List<Person> list, ageChecker checker){
for(Person person : list){
if(checker.checkAge(person.getAge())){ //根据其返回值,判断该人是否符合条件
person.print();
}
}
}
public interface ageChecker{
public boolean checkAge(int age);//返回值不为空,便于调用的地方使用其返回值
}
}
public class main {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
for(int i=0 ; i< 25; i++){
Person person = new Person();
person.setAge(i);
person.setName("name"+i);
list.add(person);
}
TestInterface test = new TestInterface();
//打印年龄大于20岁的人
test.getAge(list, new ageChecker() {//作为参数传入,然后在接口方法中定义条件
@Override
public boolean checkAge(int age) {
// TODO Auto-generated method stub
if(age > 20) return true; //条件写在这里
return false;
}
});
//打印年龄在10~15岁之间的人
test.getAge(list, new ageChecker() {
@Override
public boolean checkAge(int age) {
// TODO Auto-generated method stub
if(age >=10 && age <= 15) return true;//条件写在这里
return false;
}
});
}
}
运行后输出结果:
age = 21 name = name21
age = 22 name = name22
age = 23 name = name23
age = 24 name = name24
age = 10 name = name10
age = 11 name = name11
age = 12 name = name12
age = 13 name = name13
age = 14 name = name14
age = 15 name = name15