在Java中强加方法体的约束或限制
上下文(编辑)
有些澄清是需要的,所以我会尝试总结什么影响的问题. >该项目的目标是为程序员提供一定的功能,最有可能是以一个库的形式(一个带有类文件的JAR,我猜). 例子: 想想一个小游戏,几乎所有的东西都由已经实现的类实现和管理.程序员唯一需要做的就是写一个方法,或者说是一些描述人物将会做什么的方法(走走,改变方向,停止,检查对象).我想确保他们的方法(可能标记有注释?)只是走,或者改变方向,或者计算diff = desiredValue – x,而不是写入一些文件,或打开一个套接字连接. 问题 我想对一个方法(或一组方法)的主体施加一些不变量/限制/约束,稍后由其他程序员在其他一些包/位置中实现.说,我给他们一些东西: public abstract class ToBeExtended { // some private stuff they should not modify // ... public abstract SomeReturnType safeMethod(); } 对于本项目来说,重要的(可能是必要的)方法体满足一些不变量.或者说,这个方法的实现使用的命令集是有限的.这些约束的例子: >此方法不得执行任何I / O. 换个方法: >这个方法可以调用已知(特定)类的方法. 我一直在看注释,似乎没有什么接近这个. >定义一些注释@SafeAnnotation,并将其应用于方法,与实现者定义合同,他将遵循强加的规则,否则系统将发生故障. 例: public enum AllowedOperations { OP1,OP2 } public class TheOneKnown { public void executeMyStuff (List<AllowedOperations> ops) { // ... } } 我的问题 语言中是否有任何功能,例如注释,反射或其他方式,如果方法有效(即满足我的约束),我可以检查(在编译时或运行时)? 如果没有(我不认为),这第二种方法是否适合选择? 更新(进度) 看了一些相关的问题,我也在考虑(作为第三个选择,也许)按照this question的接受答案给出的步骤.尽管这可能需要对架构进行一些反思. 使用注释来强加限制的整个想法似乎需要实现我自己的注释处理器.如果这是真的,我也可以考虑一个小的域特定语言,以便程序员将使用这些有限的操作,然后将代码转换为Java.这样,我也可以控制指定的内容. 解决方法
我认为方向
in this question是好的.
>使用一个特定的ClassLoader来加载该类.当心,他们是一种有趣的马,通常会发生类本身由父类加载器加载.可能你想要某种类型的UrlClassLoader,并且父类加载器将被设置为根类加载器这还不够. 除了上述之外,我推荐2个选项: 给方法一个控制器,它将包含它可以调用的功能 例如: public void foo(Controller ctrl) { } public class Controller { public boolean commit(); public boolean rollback(); } 这可以给用户一个句柄,允许什么操作. 使用Intent样命令模式 在Android中,系统的组件相当封闭.他们不能直接相互沟通,他们只能发起一个事件,“发生”,或“我想要这样做”. 这样一来,可用命令的集合就没有限制.通常,如果方法只做小业务逻辑,那就够了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 更改类和对象. (其他aproachs?)
- 将Java FX 2.0添加到现有的Netbeans项目中
- java – 在Oracle中的to_char()中显示时区描述
- 使用eclipse + maven一步步搭建SSM框架教程详解
- java – Glassfish Security – jdbcRealm:如何使用SHA-25
- java – Hibernate saveOrUpdate()尝试在应该更新时保存
- Eclipse中导入Maven Web项目并配置其在Tomcat中运行图文详解
- springmvc拦截器登录验证示例
- java – 在UDP上发送和接收序列化对象
- java – 错误:无法在JSP中解析日历