大话Java中的接口
发现最近大家都为了所谓的兼容性和扩充性都在滥用接口,现在大话下Java中的接口。
首先对java中的接口进行分类
1.标示性接口
常见的如下:
序列化接口
?
public interface Serializable {}?可迭代接口:
?
public interface Iterable<T> { /** * Returns an iterator over a set of elements of type T. * * @return an Iterator. */ Iterator<T> iterator();}?比较接口:
?
public interface Comparable<T> { public int compareTo(T o);}2.功能性接口
此类接口最为常见,也是我们在使用中最滥用的一部分,常见如下:
Map接口:
?
public interface Map<K,V> { int size(); boolean containsKey(Object key);............}?List接口:
?
public interface List<E> extends Collection<E> { int size(); boolean isEmpty();......}3.常量型接口
此类接口一般是一些静态常量,常见如下:
cookie policy接口:
?
public interface CookiePolicy { /** * One pre-defined policy which accepts all cookies. */ public static final CookiePolicy ACCEPT_ALL = new CookiePolicy(){ public boolean shouldAccept(URI uri, HttpCookie cookie) { return true; } }; /** * One pre-defined policy which accepts no cookies. */ public static final CookiePolicy ACCEPT_NONE = new CookiePolicy(){ public boolean shouldAccept(URI uri, HttpCookie cookie) { return false; } };......}?其次我们罗列下我们常犯的错误
1.接口中未定义的方法在实现类中调用
?
public interface ITest{ boolean isTest();}?实现类:
?
public class Test implements ITest{@Override public boolean isTest() { return false; }public boolean isOk(){return true;}}?调用:
?
public class MainTest{private ITest test=new Test();public void test(){(Test)test.isOk();}}?既然你非要调用为啥不在接口中声明了,如果是自己独特的方法那么接口设计就出了问题,自己独特的方法也应该是private的,然后在isTest()中调用,正确做法如下:
修改接口声明:
?
public interface ITest{ boolean isTest(); boolean isOk();}?2.接口中未声明的方法在实现类中public出来了,举例如下:
接口:
?
?
public interface ITest{ boolean isTest();}?
?实现类:
?
public class Test implements ITest{@Override public boolean isTest() { return isOk(); }public boolean isOk(){return true;}}?
?调用:
?
public class MainTest{private ITest test=new Test();public void test(){test.isTest();}}暴露出来的方法就要维护,参数为接口型的那么这种接口未声明的方法没有办法给外界调用,因此应该修改成private的,
自己调用,不需要维护。
强烈建议慎用接口
?