Реализованные классы / подклассы в поддержке контента в eclipse

#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

Введите arraylist

Нажмите ctrl пробел и выберите arraylist

Нажмите Ctrl   Пробел

Введите тип и название
Введите тип и название

Ответ №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. Мне нужны все возможные. Я не хочу знать, с чего начинается реализованный класс. Спасибо.