Java-接口特别用法

接口

一般我们使用接口的时候都是直接实现接口,然后覆盖接口中的方法。

然而我要介绍的这种是在Thking in java 中看到的。定义一个接口句柄,把接口句柄作为方法的参数,

然后要使用这个方法的时候,必须传递一个实现了这个接口的类,或者内部类。这里的特别之处在于

把接口作为方法的参数。

例如

Compare接口如下:

package c08;

 interface Compare {
	boolean lessThan(Object lhs,Object rhs);
	boolean lessThanOrEqual(Object lhs,Object rhs);
}

 SortVector类的构建器使用了一个接口句柄

package c08;
import java.util.*;
public class SortVector extends Vector {
	private Compare compare;
	public SortVector(Compare comp){
		compare=comp;
	}
	public void sort(){
		quickSort(0,size()-1);
	}
	private void quickSort(int left,int right){
		if(right>left){
			Object o1=elementAt(right);
			int i=left-1;
			int j=right;
			while(true){
				while(compare.lessThan(
						elementAt(++i),o1));
			while(j>0)
				if(compare.lessThanOrEqual(elementAt(--j), o1))
					break;
			if(i>=j)break;
			swap(i,j);
			}
			swap(i,right);
			quickSort(left,i-1);
			quickSort(i+1,right);
		}
	}
	private void swap(int loc1,int loc2){
		Object tmp=elementAt(loc1);
		setElementAt(elementAt(loc2),loc1);
		setElementAt(tmp,loc2);
	}
}

 这里使用了StringCompare内部类实现Compare接口

package c08;
import java.util.*;
public class StringSortTest {
	
	static class StringCompare implements Compare{
		public  boolean lessThan(Object lhs,Object rhs)
		{
			return ((String)lhs).toLowerCase().compareTo(((String)rhs).toLowerCase())<0;
		}
		public boolean lessThanOrEqual(Object lhs,Object rhs){
			return ((String)lhs).toLowerCase().compareTo(((String)rhs).toLowerCase())<=0;
		}
	}
	
	 public static void main(String[] args){
		SortVector sv=new SortVector(new StringCompare());
		sv.addElement("d");
		sv.addElement("A");
		sv.addElement("C");
		sv.addElement("c");
		sv.addElement("b");
		sv.addElement("B");
		sv.addElement("D");
		sv.addElement("a");
		sv.sort();
		Enumeration e=sv.elements();
		while(e.hasMoreElements())
			System.out.println(e.nextElement());
	}
	
}

 也可以用匿名内部类来实现Compare接口

private SortVector v = new SortVector(
    new Compare() {
        public boolean lessThan(Object l, Object r) {
            return ((String)l).toLowerCase().compareTo(((String)r).toLowerCase()) < 0;
        }
        public boolean lessThanOrEqual(Object l, Object r) {
            return ((String)l).toLowerCase().compareTo(((String)r).toLowerCase()) <= 0;
        }
    }
);

总结

Java中通过接口来实现变的东西,从而将不变的与变得分隔开,这是Java很重要的设计思想。上面这种接口的使用方法

希望能给大家一个启发,谢谢阅读。

猜你喜欢

转载自blog.csdn.net/a614528195/article/details/81296439