Все объекты гарантированно имеют метод .equals()
, поскольку Object содержит метод, .equals()
, который возвращает логическое значение. Задача подкласса переопределять этот метод, если требуется дополнительное определение определения. Без него (т. Е. С помощью ==
) только адреса памяти проверяются между двумя объектами для равенства. String переопределяет этот метод .equals()
и вместо использования адреса памяти возвращает сравнение строк на уровне символа для равенства.
Ключевое замечание состоит в том, что строки хранятся в одном пуле, поэтому после создания строки он всегда хранится в программе по тому же адресу. Строки не меняются, они неизменяемы. Вот почему это плохая идея использовать регулярную конкатенацию строк, если у вас есть серьезное количество обработки строк. Вместо этого вы будете использовать предоставленные классы StringBuilder
. Помните, что указатели на эту строку могут измениться, и если вам было интересно увидеть, были ли два указателя одинаковыми ==
, это был бы прекрасный способ. Строки сами не делают.
Добавьте следующий фрагмент в свой pom.xml:
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>9</source>
<target>9</target>
</configuration>
</plugin>
</plugins>
</build>
Часть трассировки стека
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.readSourceFile(JavaCompiler.java:821)
относится к строке кода
throw new CompletionFailure(c, diags.fragment("cant.resolve.modules"));
Это может произойти, если вы пытаетесь построить модуль maven, который не основан на Java9 и / или не имеет (правильного) объявления модуля module-info.java
с версией выпуска, указанной как 9, где он не сможет разрешать модули с / без объявления.
/META-INF/versions/9
.
– Robert Scholte
23 October 2017 в 17:28
module-info.class
в META-INF
?
– nullpointer
23 October 2017 в 17:32
UPDATE
В большинстве случаев эта ошибка возникает, когда компилятор пытается сообщить об ошибке компиляции, но он взрывается в процессе. До сих пор в основном два подхода помогли решить эти проблемы:
-proc:none
(похоже, что обработка аннотаций может нарушить компилятор, поэтому, если вы не предназначены для использовать любой, это бесплатный выигрыш). ORGINAL SOLUTION
После множества проб и ошибок я смог локально решить проблему / исправить эту проблему, в конце концов, мой подход был следующим:
It по-прежнему не соответствует мне, как зависимость от тестовой области может повлиять на компиляцию проекта ... Также выяснилось, что javax.servlet: servlet-api: 3.0.1: предоставляется уже среди зависимостей модуля сбоя, а зависимость от тестируемой области фактически не использовалась ни для чего.
В итоге я просто удалил неправильно определенный тестовый сервлет et-api из модуля запуска ошибок, и вдруг Maven смог скомпилировать ранее провальный модуль.
Я уверен, что это очень неясный ответ на очень неясный вопрос, в первую очередь, но, надеюсь, мой подход будет полезен для кого-то другого.