#java #eclipse #subclass #eclipse-jdt #content-assist
#java #eclipse #подкласс #eclipse-jdt #поддержка содержимого
Вопрос:
Что я пытаюсь сделать, так это:
List<String> list = new
а затем нажмите Ctrl пробел и получите ArrayList<String>()
(среди прочих), чтобы отобразить в предложении типа.
Я думал, что у меня это работало ранее, но недавно мне пришлось переустановить, и я не могу найти для этого настройку.
Это Eclipse Java EE helios, но при необходимости я могу перейти на indigo.
Я попытался обратиться за помощью здесь, но не нашел информации, которую искал. Я пытался установить все флажки в разделе «Типы предложений по умолчанию» (Java -> Editor -> Content Assist -> Advanced»безрезультатно.
Комментарии:
1. Действительно? Раньше это работало? Я никогда такого не видел. Мне интересно посмотреть, как это делается.
2. Это стандартное поведение в IntelliJ
3. Это кажется невозможным даже в ссылке, которую вы переслали. Я никогда не видел такого поведения. Вы уверены, что раньше это работало?
4. И это стандартное поведение Netbeans. Почему такая популярная среда разработки, как Eclipse, не имеет такой полезной функции. Без этого мне приходится углубляться в API, который иногда неизвестен.
5. Вы убедились, что импортировали java.util. Сначала список.
Ответ №1:
Eclipse не знает, какой класс реализует интерфейс, и не будет загружать их для всех интерфейсов, которые у него есть. Но Eclipse может узнать, что вы используете, и показать это вам при следующем использовании, возможно, именно это и произошло с вами, со временем вы научили Eclipse реализованным классам!
Вот пример Eclipse до изучения / и после изучения того, какие классы реализуют Map
.
Как вы можете видеть на изображении, в первый раз Eclipse не знала ничего, кроме HashMap
того, что я использовал раньше.
После этого я использовал TreeMap
и LinkedHashMap
, введя их вручную (только в первый раз), и Eclipse теперь кэшировал их.
Как предложили ребята, вы можете поставить точку Map
и щелкнуть Ctrl T
, чтобы все классы реализовали это. Будут полезны в первый раз.
ОБНОВЛЕНИЕ в 2014 году!
Как @K.Карпентер заметил, что эта функция отключена в более новых версиях Eclipse. Чтобы повторно включить его. Перейдите в окно-> Настройки-> Java-> Редактор-> Content Assist-> Дополнительно.
В разделе «Виды предложений по умолчанию» вам нужно будет проверить «Предложения типа Java«.».».».».».»
Комментарии:
1. На самом деле это лучший ответ, но не совсем то, что я ожидал.
2. Оооо, хорошо. Это объясняет, почему он предоставил мне только ArrayList для списка и HashMap для карты.
3. Прошло уже пару лет, но поддерживали ли какие-либо версии Eclipse со времен Galileo эту функцию обучения? Я определенно не видел, чтобы это происходило с тех пор.
4. @K.Carpenter вы правы. Это стало конфигурацией и по умолчанию отключено. Я обновляю ответ, чтобы отразить это.
Ответ №2:
Подобный код — одна из моих любимых ненавистей к Java Generics. Я использую библиотеки Google Guava, чтобы сделать мой общий код более читаемым, и в качестве побочного эффекта мне не нужна эта конкретная функция в Eclipse (хотя я согласен, что она должна быть реализована).). Guava также имеет аналогичную поддержку для наборов.
Например, обычно я бы объявил свой код следующим образом:
import com.google.common.collect.Lists;
...
List myList<String> = Lists.newArrayList();
Ответ №3:
Я хотел бы видеть, как Eclipse делает это, но я предполагаю, что content assist никогда не работал без начального символа (если только нет какой-то скрытой функции, о которой мы не знаем).
Что ж, имея это в виду, что я делаю, чтобы обойти «блокировку с наиболее используемыми реализациями», чтобы посмотреть на javadoc в All Known Implementing Classes
разделе, чтобы увидеть другие возможности, которые я мог бы использовать.
Я знаю, что это не встроенное в Eclipse решение, но это может помочь некоторым пользователям, которые застряли в той же проблеме.
Ответ №4:
Вот способ, которым вы можете добавить новый шаблон в eclipse, затем все, что вам нужно сделать, это ввести arraylist, нажать ctrl пробел, и он создаст для вас полное объявление. Все, что вам нужно сделать, это добавить тип и имя.
Сохраните этот файл, затем импортируйте его в eclipse
Вот как импортировать / экспортировать шаблон
-
Перейдите в Окно > Настройки> Java> Редактор> Шаблоны
-
Выберите нужные шаблоны. НБ! Флажки не указывают, что выбрано; они используются для включения / отключения шаблона. Шаблон выбирается, если выделена вся строка в таблице, поэтому используйте Ctrl щелчок левой кнопкой мыши или метод, специфичный для вашей операционной системы, для множественного выбора шаблонов.
-
Нажмите Импортировать … и выберите полученный XML-файл. Или экспортируйте … и укажите имя файла.
Введите ArrayList
Нажмите ctrl пробел и выберите arraylist
Введите тип и название
Ответ №5:
Не претендую на то, чтобы быть ответом на ваш вопрос, но я использую Quick Fix (Ctrl 1/Ctrl 2) для определения новой локальной переменной или поля.
Сначала я набираю (возможно, используя Ctrl Space для поддержки содержимого):
new ArrayList<String>();
Затем я нажимаю Ctrl 2 и L, который присваивает инструкцию новой локальной переменной, генерируя определение переменной с создаваемым типом:
ArrayList<String> arrayList = new ArrayList<String>();
Наконец, я использую tab (можно также использовать Enter) для навигации между вставленными arrayList
и ArrayList
, чтобы указать точное имя переменной и ее тип из выпадающего списка:
List<String> list = new ArrayList<String>();
Нажатие tab в третий раз перемещает курсор в конец инструкции.
Надеюсь, вы тоже найдете этот способ полезным.
Ответ №6:
Я могу это сделать, но это не отображается в предложении типа. Попробуйте ввести:
List<String> list = new Ar
Нажмите Ctrl-пробел и просто примите первое предложение. Для меня это завершается до ArrayList<String>()
(для этого используется дистрибутив SpringSource Tool Suite Eclipse).
Комментарии:
1. Я могу это сделать, но я не хочу быть заблокированным в ArrayList. Мне нужны все возможные. Я не хочу знать, с чего начинается реализованный класс. Спасибо.