论坛首页 Java版 OO

对应implements是不是应该有个关键字from

浏览 2822 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-04-10
Norther 写道
实在看不出来这有什么方便的,如果一个接口有七七四十九个实现你怎么from?

请看前面的帖子,我很清楚的说明了使用场景.
   
0 请登录后投票
时间:2008-04-10
quaff 写道
没错,接口是依赖于实现了,但是不要用原来的interface来理解它,你可以把它们当作是两种不同的interface.Ia和Ib就没打算让其他类来实现,所以类不存在了它们俩也没存在的必要.

你的意思是说不准备有新的类,那人家把两个方法写在一起肯定有它的道理,而你的意思是说把这个类拆开来,当成两个来用,且又没有打算实现新的接口.我看还不如直接写两个类算了,你那接口和类没有什么区别.
接口是被用来实现的,而你那接口倒好像是定死了不让实现了...
我感觉就好像是这样的,Ia和Ib代表两个不同的操作,而类ab同时实现了Ia和Ib的方法,现在要类ab来分面当做Ia和Ib来完成不同的事情.类ab将Ia和Ib的不同操作装在一起,不觉得违反了什么规则吗?
要我说,干脆自己写个算了,还免得这么麻烦:)
   
0 请登录后投票
时间:2008-04-10
Fly_m 写道
quaff 写道
没错,接口是依赖于实现了,但是不要用原来的interface来理解它,你可以把它们当作是两种不同的interface.Ia和Ib就没打算让其他类来实现,所以类不存在了它们俩也没存在的必要.

你的意思是说不准备有新的类,那人家把两个方法写在一起肯定有它的道理,而你的意思是说把这个类拆开来,当成两个来用,且又没有打算实现新的接口.我看还不如直接写两个类算了,你那接口和类没有什么区别.
接口是被用来实现的,而你那接口倒好像是定死了不让实现了...
我感觉就好像是这样的,Ia和Ib代表两个不同的操作,而类ab同时实现了Ia和Ib的方法,现在要类ab来分面当做Ia和Ib来完成不同的事情.类ab将Ia和Ib的不同操作装在一起,不觉得违反了什么规则吗?
要我说,干脆自己写个算了,还免得这么麻烦:)

你的思维还是局限在目前interface的用处之内
   
0 请登录后投票
时间:2008-04-10
quaff 写道
guyikun 写道
java接口和实现绑定死了,那要接口还有意义么?

原来怎么用接口可以照样用,这个只是增加一个新功能,把接口当作mask来用,挡住不需要暴露的方法,可以把它看作是一种配置文件.
比如我有个类有方法a,b,这个类是别的lib的不能修改,现在我只为dwr暴露a方法,只为cxf暴露b方法,我新增加两个接口就行了.


我觉得你这种需求应该用annotation之类的标记来实现可能比较好,从现有的技术来满足你的需求的角度上说。
   
0 请登录后投票
时间:2008-04-10
Lucas Lee 写道
quaff 写道
guyikun 写道
java接口和实现绑定死了,那要接口还有意义么?

原来怎么用接口可以照样用,这个只是增加一个新功能,把接口当作mask来用,挡住不需要暴露的方法,可以把它看作是一种配置文件.
比如我有个类有方法a,b,这个类是别的lib的不能修改,现在我只为dwr暴露a方法,只为cxf暴露b方法,我新增加两个接口就行了.


我觉得你这种需求应该用annotation之类的标记来实现可能比较好,从现有的技术来满足你的需求的角度上说。

用annotation的话需要框架去定制并且处理,并且不比这个方法简单,现在说的不是能不能用已有的技术去实现,是开辟一个新的思路.
   
0 请登录后投票
时间:2008-04-10
现成 的代理模式不就可以了么?

package com.javaeye.codeutl;

public class A {
    String s = null;
    public A(String s) {
        this.s = s;
    }

    public char charAt(int index) {
        return s.charAt(index);
    }

    class B {
        String s = null;
        public B(String s) {
            this.s = s;
        }

        public int indexOf(int ch) {
            return s.indexOf(ch);
        }


    }


}



而且接口只是一种约定,只要方法签名是一样的,即使你用接口约束了,
假设你内部直接使用 Object的invoke方法,看上去没有暴露的方法实际还是暴露着的。 只有用 java.lang.reflect.Proxy代理之后,才是真的屏蔽了不想暴露的方法。
   
0 请登录后投票
时间:2008-04-11
codeutil 写道
现成 的代理模式不就可以了么?

package com.javaeye.codeutl;

public class A {
    String s = null;
    public A(String s) {
        this.s = s;
    }

    public char charAt(int index) {
        return s.charAt(index);
    }

    class B {
        String s = null;
        public B(String s) {
            this.s = s;
        }

        public int indexOf(int ch) {
            return s.indexOf(ch);
        }


    }


}



而且接口只是一种约定,只要方法签名是一样的,即使你用接口约束了,
假设你内部直接使用 Object的invoke方法,看上去没有暴露的方法实际还是暴露着的。 只有用 java.lang.reflect.Proxy代理之后,才是真的屏蔽了不想暴露的方法。





1.我没说现在的java语言不能做到,只不过我认为这种方法更直观更方便
2.在反射面前private都是空气,我说的是对外暴露服务,比如dwr,cxf,我前面已经说的很清楚了可能是你没用过xfire.

再说一句,java.lang.reflect.Proxy代理也保留了target的引用,一样可以把它反射出来,然后做任何想做的事情
   
0 请登录后投票
时间:2008-04-11
为什么还要用接口呢,直接定义两个类委派给实现类不就行了,facade貌似就是干这个的。
   
0 请登录后投票
时间:2008-04-11
接口和实现是抽象和具体,
如果让具体自动抽象?
乱……
   
0 请登录后投票
时间:2008-04-11
名词混淆了吧,与外部的接口不等同于JAVA的接口,前面那个接口范围更大,普通类也可以做为对于其他系统的接口,何必一定要让JAVA搞个implements from来把这2个名词弄的一模一样呢。
   
0 请登录后投票
论坛首页 Java版 OO

跳转论坛:
JavaEye推荐