Java 与其他语言中的PHP常量()等效

Java 与其他语言中的PHP常量()等效,java,fortran,ocaml,Java,Fortran,Ocaml,我希望能够从变量生成的名称中访问常量值,例如,如果变量包含“123”,则获取名为“C123”的常量的内容 在这里搜索之后,我可以看到PHP能够做到这一点,但由于我目前正在使用Java、OCaml和Fortran,我想知道这些语言中是否有等效语言?这通常被称为反射。(这是它上面的标签。) 基本上是指“让程序检查程序”的过程 如果你寻找反思,你应该能够找到大量的指导 顺便说一句,使用反射通常是糟糕编程风格的标志。据我所知,OCaml中没有等价物,我很高兴没有,因为这只会使编译复杂化,并且可能会降低使

我希望能够从变量生成的名称中访问常量值,例如,如果变量包含“123”,则获取名为“C123”的常量的内容


在这里搜索之后,我可以看到PHP能够做到这一点,但由于我目前正在使用Java、OCaml和Fortran,我想知道这些语言中是否有等效语言?

这通常被称为反射。(这是它上面的标签。)

基本上是指“让程序检查程序”的过程

如果你寻找反思,你应该能够找到大量的指导


顺便说一句,使用反射通常是糟糕编程风格的标志。

据我所知,OCaml中没有等价物,我很高兴没有,因为这只会使编译复杂化,并且可能会降低使用代码气味的功能的性能。

如果您提供了一个用例,这可能会更容易回答。知道你需要做什么会很有帮助。我在寻找一个快速、肮脏的问题解决方案,而不是一个优雅、正确的方法。很多受访者可能会给我一个“你不想那样做…”的回答,这是我希望避免的。不管怎样,谢谢你。+1:如果你正在开发一个框架,我不认为反思是邪恶的,但是在这种情况下,我同意你的看法,即使你能做到,这也是一个坏主意。谢谢你。我很难找到关键字来搜索,现在我有了线索!考虑到这是一种糟糕的做法,有趣的是维基百科列出了30多种允许你这么做的语言。有人认为这是个好主意。:-)我同意反思是糟糕编程风格的标志。在不支持“变体类型”(java、C++、C等)的语言中,不幸的是,你不能没有。例如,在Java(…)中,如果您想拥有类型为“a”或“B”(仅限)的对象列表,则必须创建一个类型为“a”和“B”(最坏情况:对象)的通用超类型“C”的列表,并且不能避免有人在列表中填充其他类型的“C”。在这种情况下,您的语言的类型系统太弱,您需要在运行时进行检查——使用反射……虽然我同意有比Java更强大的类型系统,但我不同意“没有反射就不行”这一点。对于您描述的特定场景,请参见我的答案。如果问题是:“OCaml中是否存在反射”,那么您是对的:没有这样的事情。OCaml在编译后会丢弃所有类型——它们不再需要了。@lambdapower:OP询问是否可以通过名称作为字符串动态访问常量。没有提到“反射”,这个术语的定义是如此模糊——而且很难定义——以至于我不确定使用它是否有效。我很感激OP为提出一个精确的问题所做的努力。@gasche:你说得对。在查阅了“反思”之后,我现在意识到它所包含的远不止我所问的简单情况。我一直在寻找快速访问一个常数;应用反射可能会使代码太慢,对我没有任何用处。