|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-04-11
楼主看一下Guice的那个ImplementedBy吧,我觉得这么写都是把接口本身存在的意义抹杀了
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-11
先有interface,然后写个class来实现它,这个是目前interface的用处.
我现在说的是先有class,然后在不同的情况下抽取不同的interface,要搞清楚先后顺序,不要提什么什么模式可以达到我的需求,我没说目前的java语言不能实现,这只是我想的一个更方便直观的解决方法,希望回帖的人认真看完帖子,鸡同鸭讲很累. |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-12
确实在某些需要Facade的场合有用,用代理是太麻烦了么,这个类型跟Interface功能类似,只是依赖关系正好相反,不过最好另起一个关键字,我想象这样写比较好
facade A narrow B 现在的java要改起来还涉及几个地方,新的转型逻辑,instance of,还有与interface相对的一些判断,不一定很简单 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-12
逆向思维,不错不错 :)
我的理解 楼主的意思应该是一个bridge模式吧。。 这样无需在语言的层级去实现吧? |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-12
不是不明白你的意思,只是你的需求作用有限。意义不大
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-12
lmj 写道 确实在某些需要Facade的场合有用,用代理是太麻烦了么,这个类型跟Interface功能类似,只是依赖关系正好相反,不过最好另起一个关键字,我想象这样写比较好
facade A narrow B 现在的java要改起来还涉及几个地方,新的转型逻辑,instance of,还有与interface相对的一些判断,不一定很简单 我想在编译器这一层就可以解决,并且很简单 interface I from C 编译的时候把C的信息从I里面去掉,然后编译C的时候带上implements I就可以了 不过如果C是已经编译好的class,这样还是不行估计得在jvm做处理 1.在I里面保留C的引用,instanceof很简单可以实现可以参考目前的instanceof,但是这个interface就依赖于C了 2.在I里面去掉C的引用,instanceof可以在运行时判断I里面所有方法的签名是不是在C里面都有,I就跟原来的interface没什么两样,但是这个效率应该要低一点. 还有一个大的问题是要选一个关键字要向后兼容,enum在1.5之前不是关键字,在1.5之后用enum命名就会出错,from也是一个常用的命名词. |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-14
楼主的需求其实还是没有描述清楚。我猜测你想要的是更细粒度的访问控制。因为java默认只有public/private/protected/default的区分,但是楼主似乎希望能自己定义一个访问权限,确保某个调用者(比如dwr)只能访问某些方法。
比如: class A { public dwr x(); private dwr y(); public z(); } dwr能访问 x(), y() 而不能访问 z() 这个需求用interface来描述其实不恰当,因为按照楼主的说法,你丧失了接口作为一个独立类型的意义,而且变成“接口”依赖“具体实现类”,所以有很多人来反对楼主。如果是像我描述的,楼主需要寻找一种细粒度的访问控制,则就不会有人来反对楼主了,呵呵。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-14
hax 写道 楼主的需求其实还是没有描述清楚。我猜测你想要的是更细粒度的访问控制。因为java默认只有public/private/protected/default的区分,但是楼主似乎希望能自己定义一个访问权限,确保某个调用者(比如dwr)只能访问某些方法。
比如: class A { public dwr x(); private dwr y(); public z(); } dwr能访问 x(), y() 而不能访问 z() 这个需求用interface来描述其实不恰当,因为按照楼主的说法,你丧失了接口作为一个独立类型的意义,而且变成“接口”依赖“具体实现类”,所以有很多人来反对楼主。如果是像我描述的,楼主需要寻找一种细粒度的访问控制,则就不会有人来反对楼主了,呵呵。 你的理解正确,但是按你的方法去加dwr等等是不可取的,首先关键字数量不定,其次这需要dwr自己去处理,我说的那种是通用的. 我前面说了,这个interface跟原来的interface不一样,但是也有一些相通的地方,所以借interface壳上市 |
|
| 返回顶楼 | |
|
最后更新时间:2008-04-14
大家就是对“借壳上市”不满嘛,做好主营业务行不行……嘿嘿。
BTW,你也不要急着否定我说的方法。事实上这种方式是可行的,JavaScript 2的namespace机制就是这样的。 dwr可以不是关键字,而是一种特殊对象,叫做Namespace。我给个大体的例子:
package pkg1 {
namespace dwr = new Namespace('http://getahead.org/dwr');
namespace v2;
public class MyClass {
...
public a():int {...}
v2 dwr a():String {...}
private dwr b():void {...}
dwr c():int {...}
}
}
package test {
import pkg1.*;
var x:MyClass = new MyClass();
var result1:int = x.a(); // call public a()
namespace dwr = new Namespace('http://getahead.org/dwr');
var result2:String = x.dwr::a(); // call v2 dwr a()
use namespace pkg1.v2;
x.a(); // call v2 dwr a()
x.b(); // error!
use namespace dwr;
x.b(); // call private dwr b()
}
public/private等在JS2中不过是预先生成的namespace,与自定义namespace并没有本质差别。 当然在Java中,可能无法直接用JS2的语法。但是可以用annotation达到类似的效果。而且annotation是一种比namespace具有更丰富语义的构造。比如DWR自己的annotations:
@RemoteProxy
public class RemoteFunctions {
@RemoteMethod
public int calculateFoo() {
return 42;
}
}
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-14
hax 写道 大家就是对“借壳上市”不满嘛,做好主营业务行不行……嘿嘿。
BTW,你也不要急着否定我说的方法。事实上这种方式是可行的,JavaScript 2的namespace机制就是这样的。 dwr可以不是关键字,而是一种特殊对象,叫做Namespace。我给个大体的例子:
package pkg1 {
namespace dwr = new Namespace('http://getahead.org/dwr');
namespace v2;
public class MyClass {
...
public a():int {...}
v2 dwr a():String {...}
private dwr b():void {...}
dwr c():int {...}
}
}
package test {
import pkg1.*;
var x:MyClass = new MyClass();
var result1:int = x.a(); // call public a()
namespace dwr = new Namespace('http://getahead.org/dwr');
var result2:String = x.dwr::a(); // call v2 dwr a()
use namespace pkg1.v2;
x.a(); // call v2 dwr a()
x.b(); // error!
use namespace dwr;
x.b(); // call private dwr b()
}
public/private等在JS2中不过是预先生成的namespace,与自定义namespace并没有本质差别。 当然在Java中,可能无法直接用JS2的语法。但是可以用annotation达到类似的效果。而且annotation是一种比namespace具有更丰富语义的构造。比如DWR自己的annotations:
@RemoteProxy
public class RemoteFunctions {
@RemoteMethod
public int calculateFoo() {
return 42;
}
}
js怎么变得这么丑陋,搞得太复杂了 Annotation我前面批过了,还是要每个框架自己去搞一套,命名如果觉得interface不爽,Annotation用@interface,这个可以用&interface,其实这个跟原来的interface没什么很大的区别还是interface更直观. |
|
| 返回顶楼 | |







