Например, не так ли много раз, когда мы хотим иметь объекты с этими именами?
2ndInning
3rdBase
4thDim
7thDay
Но представьте, когда кто-то попытается получить переменную с именем 666:
int 666 = 777;
float 666F = 777F;
char 0xFF = 0xFF;
int a = 666; // is it 666 the variable or the literal value?
float b = 666F // is it 666F the variable or the literal value?
Возможно, одним из способов, который мы могли бы подумать, является то, что переменные, начинающиеся с цифры, должны заканчиваться алфавитом - до тех пор, пока он не начинается с 0x и заканчивается буквой, используемой как шестнадцатеричная цифра, или она не конец с такими символами, как L или F и т. д. и т. д.
. Но такие правила сделали бы очень трудным для программистов, как заметил Йоги Берра - как вы могли думать и удариться одновременно? Вы пытаетесь написать компьютерную программу как можно быстрее и без ошибок, а затем вам придется беспокоиться обо всех этих небольших кусках. Я бы предпочел, чтобы программист имел простое правило о том, как следует указывать переменные.
В моих усилиях, использующих лексеры и регулярное выражение для анализа журналов данных и потоков данных для вставки в базы данных, я не обнаружил, ключевое слово или переменная, начинающаяся с цифры, затрудняла бы синтаксический анализ - так долго существует как можно более короткий путь, чтобы устранить двусмысленность.
Следовательно, это не так просто, как облегчить компилятор, но для программиста.
Если ваш java-код использует некоторые внешние библиотеки, такие как Lombok, использование компилятора scala для создания java-класса завершится неудачей, так как компилятор scala не знает аннотации.
Мое решение - изменить зависимости задачи, сделать компиляцию Scala перед Java.
tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")
Теперь задача compileScala
выполняется до compileJava
, вот и все.
Если ваш Java-код зависит от Scala-кода, вам нужно сделать еще два шага,
Разделить выходную папку Scala и Java,
sourceSets {
main {
scala {
outputDir = file("$buildDir/classes/scala/main")
}
java {
outputDir = file("$buildDir/classes/java/main")
}
}
Добавьте вывод scala в качестве зависимости для compileJava
,
dependencies {
compile files("$sourceSets.main.scala.outputDir")
}