当前位置: 首页 > 知识库问答 >
问题:

在Java中,对方法参数施加约束,除了它们的数量和类型之外,[duplicate]

郗学
2023-03-14

我试图定义一个返回数组的方法(称为“range”)。我传递两个整数,比如m和n,它返回一个长度数组(n-m),如下表所示:隐式地,我假设n大于m。但我想明确地强加这个条件。有没有办法把这种条件强加给方法的论证?

public static int[] range(int m, int n) {
    int[] r=new int[n-m];
    for(int i=0; i<n-m; i++)
        r[i]=m+i;

    return r;
}

共有1个答案

双弘益
2023-03-14

您试图静态地(在编译时)确保依赖于仅在运行时可用的信息的后置条件。这个概念称为依赖类型。通常,依赖类型检查是不可判定的。因此,如果您有一种支持依赖类型检查的语言,则可以编写一个类型检查器无法判断其类型是否正确的程序。这种语言的一个例子是Idris,它类似于Haskell。Idris是一种仅用于研究的语言,以了解如何在编程中实际使用依赖类型(依赖类型是自动定理证明者的一个众所周知的概念)。

据我所知,Java没有依赖类型检查,因此您只能动态地(在运行时)检查前置和后置条件,例如,如果发生意外情况,则抛出异常。

 类似资料:
  • 如果我使用typeclass来重载方法,那是在“字典传递样式”中实现的。也就是说,该方法获得一个额外的参数(在surface Haskell中没有出现);为了解决重载问题,该方法根据其“适当”参数的类型查找字典;并从字典中提取方法实现。如本q中所述。 但是没有方法的类型类呢?它们可以用作约束条件。有他们的字典吗?里面包含什么? 具体示例如下: GHC将surface Haskell转换为内部表示形

  • 我有一系列复杂的类型级别函数,它们的计算结果如下: 显然,在这种情况下,这个表达式是一个。更一般地说,我们可以说: 有没有办法教GHC推断这一点? 编辑:@chi指出,在某些情况下,GADT可以解决这一问题,但我的特殊情况是: 然后 不能被访问,但是也许GHC应该能够推断出

  • 本文向大家介绍TypeScript 类型参数作为约束,包括了TypeScript 类型参数作为约束的使用技巧和注意事项,需要的朋友参考一下 示例 使用TypeScript 1.8,类型参数约束可以从同一类型参数列表中引用类型参数。以前这是一个错误。            

  • 问题内容: 我是从Joshua Bloch的google I / O困惑者演讲中得到的。这是代码 这个main方法会引发异常,因为它是原始类型,因此in中的所有泛型都将被删除,因此最终调用而不是。 我的问题是,即使我打电话是不是应该把它调用的方法,因为由于类型擦除,这种方法是有效的并且是类型的不是? 问题答案: 被调用的方法是在编译时定义的,而不是在运行时定义的。 如果在构造函数调用中添加参数,则

  • 问题总结:我想传递一个带有类型参数(如

  • 本文向大家介绍在Oracle数据库中添加外键约束的方法详解,包括了在Oracle数据库中添加外键约束的方法详解的使用技巧和注意事项,需要的朋友参考一下 外键指定一个列(或一组列)的值必须符合另一个表的一些行的值。我们说这是维持关联表的参照完整性。 在图形化界面中,在 外键 选项卡,只需简单地点击外键栏位来编辑。使用外键的工具栏,能让你创建新的、编辑或删除选择的外键栏位。 添加外键:添加一个外键到表