java中什么是约束_在Java中强加方法体的约束或限制

上下文(编辑)

有些澄清是需要的,所以我会尝试总结什么影响的问题.

>该项目的目标是为程序员提供一定的功能,最有可能是以一个库的形式(一个带有类文件的JAR,我猜).

>为了使用所述功能,程序员必须符合必须(应该)满足的约束.否则它将无法正常运行(就像java.util.concurrent中的锁一样,必须在适当的时间和地点获取/释放).

>这段代码不会是使用它的应用程序的入口点(即没有main).

> API中暴露的操作数量有限(少).

例子:

想想一个小游戏,几乎所有的东西都由已经实现的类实现和管理.程序员唯一需要做的就是写一个方法,或者说是一些描述人物将会做什么的方法(走走,改变方向,停止,检查对象).我想确保他们的方法(可能标记有注释?)只是走,或者改变方向,或者计算diff = desiredValue – x,而不是写入一些文件,或打开一个套接字连接.

想一个交易经理.经理将由这个图书馆提供,以及一些常规的交易属性(它们的隔离级别,超时,…).现在,程序员想要交易并使用这个经理.我想确保他们只读,写,提交或回滚一些资源,经理知道.如果经理没有控制任何火箭发射,我不希望他们在事务中间发射Rocket.

问题

我想对一个方法(或一组方法)的主体施加一些不变量/限制/约束,稍后由其他程序员在其他一些包/位置中实现.说,我给他们一些东西:

public abstract class ToBeExtended {

// some private stuff they should not modify

// ...

public abstract SomeReturnType safeMethod();

}

对于本项目来说,重要的(可能是必要的)方法体满足一些不变量.或者说,这个方法的实现使用的命令集是有限的.这些约束的例子:

>此方法不得执行任何I / O.

>此方法不得实例化任何未知(潜在危险的)对象.

> …

换个方法:

>这个方法可以调用已知(特定)类的方法.

>这个方法可以执行一些基本的指令(数学,分配局部变量,ifs,循环…).

我一直在看注释,似乎没有什么接近这个.

我的选择到目前为止

>定义一些注释@SafeAnnotation,并将其应用于方法,与实现者定义合同,他将遵循强加的规则,否则系统将发生故障.

>使用允许的操作定义枚举.而不是暴露允许的方法,只有一个方法被公开,它接受这些枚举对象的列表(或类似于Control Flow Graph?),并执行它,让我控制可以做的事情.

例:

public enum AllowedOperations { OP1, OP2 }

public class TheOneKnown {

public void executeMyStuff (List ops) {

// ...

}

}

我的问题

语言中是否有任何功能,例如注释,反射或其他方式,如果方法有效(即满足我的约束),我可以检查(在编译时或运行时)?

或者说,有没有什么办法强制它只调用一些有限的其他方法?

如果没有(我不认为),这第二种方法是否适合选择?

适合于直观,设计精良和/或良好的做法.

更新(进度)

看了一些相关的问题,我也在考虑(作为第三个选择,也许)按照this question的接受答案给出的步骤.尽管这可能需要对架构进行一些反思.

使用注释来强加限制的整个想法似乎需要实现我自己的注释处理器.如果这是真的,我也可以考虑一个小的域特定语言,以便程序员将使用这些有限的操作,然后将代码转换为Java.这样,我也可以控制指定的内容.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值