【发布时间】:2021-10-09 15:57:14
【问题描述】:
假设我想定义结构相似但参数不同的类型,可以是整数或其他参数。
是否可以在 Java 中定义由整数甚至任意对象参数化的类族?
考虑以下伪代码(无法编译):
/**
* String of a certain length n and a method to reduce to length n-1
*/
public class StringN<int n> {
private String str;
public StringN( String str) {
if(str.length() != n) {
throw new IllegalArgumentException("string is not of required length!");
}
this.str = str;
}
public StringN<n-1> reduce() {
return new StringN<n-1>(s.substring(0, s.length() - 1));
}
@Override
public String toString() {
return str;
}
}
我想到的其他更自然的例子是数学中的张量积,所以如果要定义参数“n”,例如空间 R^n 作为 Java 类或在函数式编程中 Function<>-space 的“arity”。那么如何定义一个由n参数化的具有不同arity的类族呢?
如果这在 Java 中是不可能的,那么这个概念是否存在于其他功能更强大的语言中?它的正确名称是什么? (比如可能是“参数化类”?)
编辑:作为对 cmets 的反应,最后一部分只是为了了解这样一个概念的一般名称,而不是绕道其他语言。
【问题讨论】:
-
不,不可能。这个概念在 C++ 中称为模板参数。 --- 请阅读:Can I ask only one question per post?
-
@Turing85 感谢您的有用评论(正确的名称真的很有帮助!)。如果我问的是同一事物的存在和名称,您真的认为这是几个问题吗?我可以看到它可以被视为这样,但我认为可以争辩说这些信息属于一起。但由于我是新来的,我当然愿意适应。
-
@Sebastian 我认为这个问题很好,但它可能会被误读为要求提供具有此功能的其他语言列表的问题 - 这样的问题在这里会不受欢迎。
-
嗯,我认为这可以通过使用注释以某种方式实现。
-
这个概念的另一种方法是dependent typing;调查这将产生很多信息。 (我认为 C++ 非类型模板参数可以被认为是依赖类型的有限形式)
标签: java generics functional-programming dependent-type non-type-template-parameter