Приведенный ниже код компилируется двумя онлайн-компиляторами Java, но у меня возникают проблемы с VS Code.
Две проблемы:
VS Code импортирует отдельные элементы, такие как import java.util.Arrays;, но не импортирует при использовании подстановочного знака, такого как import java.util.*;.
При выполнении (редактировании) приведенного ниже кода в VS Code возникает следующее исключение:
Exception in thread "main" java.lang.ClassCastException: Entry cannot be cast to java.base/java.lang.Comparable at java.base/java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source) at java.base/java.util.ComparableTimSort.sort(Unknown Source) at java.base/java.util.Arrays.sort(Unknown Source) at EntryTester.main(EntryTester.java:33)
Я не знаю, почему актерский состав является проблемой. Вот код:
import java.util.Arrays;
class Entry implements Comparable<Entry> {
private String word;
private String definition;
public Entry(String wor, String def) {
this.word = wor;
this.definition = def;
}
public String getWord() {
return word;
}
public String getDefinition() {
return definition;
}
public String toString() {
return word + "\t" + definition;
}
public int compareTo(Entry other) {
return word.compareTo(other.getWord());
}
}
class EntryTester {
public static void main (String[] args) {
Entry[] wordList = new Entry[5];
wordList[0] = new Entry("WWW", "World Wide Web");
wordList[1] = new Entry("HTTP","Hypertext Transport Protocol");
wordList[2] = new Entry("DNS", "Domain Name System");
wordList[3] = new Entry("AWT", "Application Windowing Toolkit");
wordList[4] = new Entry("CPU", "Central Processing Unit");
Arrays.sort(wordList);
for (int j = 0; j < wordList.length; j++)
System.out.println(wordList[j].toString());
}
}
Представленное вами исключение не возникает при компиляции. Это происходит, когда вы выполняете полученную программу.
... и это не возникает из представленного кода, по крайней мере, не для меня.
Я отредактировал. Да, я имел в виду исполнение. И да, с кодом проблем нет — поэтому я и говорю в начале: «Приведенный ниже код компилируется двумя онлайн-компиляторами Java». Пожалуйста, попробуйте сделать полезные предложения относительно того, почему у меня должны быть проблемы именно с VS Code, как указано в заголовке вопроса.
Какая строка 38?
Хорошо... это строка 33. Я отредактировал код, когда публиковал его. Извинения. Отредактировали.




VS Code imports single items such as
import java.util.Arrays;but does not import when using a wildcard likeimport java.util.*;
Непонятно, что вы хотите этим сказать. Но я подозреваю, что вы неправильно понимаете, что означает импорт подстановочных знаков в Java:
java.util.java.util.concurrent и так далее.С другой стороны, если вы ожидали, что import java.util.*; импортирует имена статических методов Arrays::sort, этого не произойдет. И import java.util.Arrays; тоже! Если вы хотите импортировать методы состояния, вам нужно сделать это:
import static java.util.Arrays.*;
Если Visual Studio Java компилятор говорит вам что-то другое, что-то очень не так.
(Комментарий: большинство программистов склонны избегать импорта подстановочных знаков в производственном коде. У вас могут возникнуть проблемы, если имена объявлены в нескольких пакетах.)
When executing(edit) the code below in VS Code, the following exception occurs:
Exception in thread "main" java.lang.ClassCastException: Entry cannot be cast to java.base/java.lang.Comparable
При сортировке списка с помощью Arrays.sort существует два способа, которыми метод sort может упорядочить элементы вашего Entry[].
Comparator<Entry> для метода sort.Entry может использовать implement интерфейс Comparable<Entry>.Если вы не предоставляете Comparator, то sort метод предполагает то вы делаете это наоборот. Итак, теперь он пытается привести один из объектов Entry к Comparable, чтобы он мог вызвать на нем entry.compareTo(anotherEntry). Что не получается...
В вашем случае получается, что вы внедрили Comparator в Entry.
Итак, есть два возможных объяснения:
Возможно, вы выполняете старую версию своего кода; т.е. один из до вы изменили Entry для реализации Comparable.
Возможно, что-то не работает с вашей Visual Studio.
Если мы можем предположить, что проблема связана с кодом Visual Studio, я подозреваю, что она связана с версиями Java. В документация указано, что Java 11 поддерживается, но для рассказать VS также может быть необходимо, чтобы он использовал Java 11, а не Java 8. (Есть некоторые существенные различия во времени выполнения из-за введения модулей в Java 9....)
Не могли бы вы сказать, почему это не удается? Кроме того, почему он должен выполняться в другом месте, но не в VS Code?
Краткий ответ: ваш VS Code, возможно, сломан или неправильно установлен/неверно настроен. Я бы предпочел использовать NetBeans, Intellij или Eclipse. Или даже набор инструментов JDK.
Мне кажется, что я что-то здесь упускаю... Там 37 строк, в трассировке исключений указано, что это строка 38?