Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们可以通过编程更改语言语法吗?_Java_Syntax_Operator Overloading_Language Design - Fatal编程技术网

Java 我们可以通过编程更改语言语法吗?

Java 我们可以通过编程更改语言语法吗?,java,syntax,operator-overloading,language-design,Java,Syntax,Operator Overloading,Language Design,在Java映射中,当我们需要插入一些值时,我们使用: map.put(key, value); 在其他语言中,如用C++映射或Python字典,我们可以使用方括号: map['key'] = value 此语法对Java映射无效。我们可以通过编写一些代码或使用一些库以编程方式更改此语法吗?在Java中,您不能。很少有语言允许自定义语法。例如,Perl的“pragmas”基本上是在脚本运行之前对其进行预处理的其他Perl代码。它非常强大,但也很可怕 如果您需要与java兼容,但需要java语法

在Java映射中,当我们需要插入一些值时,我们使用:

map.put(key, value);

在其他语言中,如用C++映射或Python字典,我们可以使用方括号:

map['key'] = value

此语法对Java映射无效。我们可以通过编写一些代码或使用一些库以编程方式更改此语法吗?

在Java中,您不能。很少有语言允许自定义语法。例如,Perl的“pragmas”基本上是在脚本运行之前对其进行预处理的其他Perl代码。它非常强大,但也很可怕


如果您需要与java兼容,但需要java语法,我建议Kotlin(如C++和Python)允许。<> p> Java语法不能在运行时或编译时更改,甚至不支持运算符重载(除了<代码> +/>代码>运算符重载<代码>字符串 > 您可以在其他JVM语言(如and)中重载符号运算符(如

-
+
/
),但这是一个预定义的语法糖,语法本身仍然保持不变

允许在运行时更改语法的少数语言之一是,可以在运行时添加到其语法中。这个特性的一个实际应用示例是使SQL成为主要语法的一部分。

可以编写一个程序,在编译器看到源代码之前查看它,并将
map['key']=value
转换为
map.put(key,value)。但这可能需要更多的工作,而不是花在这上面。这甚至不包括集成到构建系统中


更严重的是,如果您提前知道所有键(我认为您可能知道,因为您使用了字符串文字),那么您可以通过使用数组获得非常相似的语法:

Object[] map = new Object[10];

map[KEY] = value;
其中key是一个整数常量,如

public static final int KEY = 0;

Hashmaps/字典在引擎盖下做类似的事情。

不,你不能。Java不支持运算符重载等。请注意,运算符重载不是实现这一点的唯一方法。例如,Scala的语法结构允许您简单地定义(调用时)看起来像语言结构的方法。(也许有人会说这只是操作符重载的一种极端形式,但我不会这样描述)。如果您使用Java 9或更高版本,您可以使用Map接口中的工厂方法
Map.of
,简化不可变映射的创建和初始化。示例:
Map Map=Map.of(“key1”、“value1”、“key2”、“value2”)