读书人

狂言Java中的接口

发布时间: 2012-12-20 09:53:21 作者: rapoo

大话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的,

自己调用,不需要维护。

强烈建议慎用接口

?

读书人网 >编程

热点推荐