在Java映射中,当我们需要插入一些值时,我们使用:
private val isFirebaseEnabled: Boolean
get() {
return try {
FirebaseApp.getInstance() != null. //that is always true, nevertheless it will throw exception if Firebase is not available
} catch (e: IllegalStateException) {
false
}
}
在其他语言(例如C ++映射或Python词典)中,我们可以使用方括号:
map.put(key, value);
此语法对于Java映射无效。我们可以通过编写一些代码或使用某些库以编程方式更改此语法吗?
答案 0 :(得分:3)
在Java中,您不能。很少有允许自定义语法的语言。例如,Perl具有“ pragma”,它们基本上是其他Perl代码,可以在脚本运行之前对其进行预处理。它非常强大,但也很可怕。
如果您需要与Java兼容,但希望使用漂亮的语法,我建议您使用Kotlin,它(例如C ++和Python)允许operator overloading。
答案 1 :(得分:1)
Java的语法无法在运行时或编译时更改,甚至不支持运算符重载(+
的{{1}}运算符重载除外。请参见:How does the String class override the + operator?)。 / p>
您可以重载其他JVM语言(例如Scala Groovy和{{3})中的符号运算符(例如String
,-
,+
) },但这是预定义的语法糖,语法本身仍保持不变。
Kotlin是允许在运行时更改语法的几种语言之一,Raku可以在运行时添加到其语法中。此功能的实际应用示例是slangs,它使SQL成为主要语法的一部分。
答案 2 :(得分:1)
有可能写一个程序在编译器看到源代码之前查看您的源代码,然后将map['key'] = value
转换为map.put(key, value);
。但这可能比花在此上的事情还要有意义。甚至连集成到构建系统中都没有。
更严重的是,如果您提前知道所有键(我认为您可能是因为使用了字符串文字),则可以通过使用数组来获得非常相似的语法:
Object[] map = new Object[10];
map[KEY] = value;
其中key是一个整数常量,例如
public static final int KEY = 0;
哈希图/字典在后台执行类似的操作。