IntelliJ: Как автоматически выделять переменные, как в Eclipse

Мой работодатель хочет, чтобы я использовал IntelliJ для разработки Java. Раньше я всегда использовал eclipse.

Одной из моих любимых функций в eclipse была возможность щелкнуть по переменной, параметру метода, полю класса и т. Д. И увидеть использование этих переменных, выделенных по всему классу.

Есть ли способ включить эту функцию в IntelliJ IDEA? Я использую Ultimate версии 9.0.3. } public SharpItem реализует AbstractItem { } public BluntItem реализует AbstractItem { } открытый интерфейс ...

Допустим, у нас есть программа, которая содержит такие классы:

public interface AbstractItem {
}
public SharpItem implements AbstractItem {
}
public BluntItem implements AbstractItem {
}

public interface AbstractToolbox {
    //well the problem starts here...
    public List<AbstractItem> getItems();
}
public ExpensiveToolbox implements AbstractToolbox {
    private List<SharpItem> items = new ArrayList()<SharpItems>;
    public List<SharpItem> getItems() { return this.items; }
}
public CheapTooblox implements AbstractToolbox {
    private List<BluntItem> items = new ArrayList()<BluntItem>;
    public List<BluntItem> getItems() { return this.items; }
}

Легко, верно? Что ж, допустим, теперь мы хотим создать такой метод (в каком-то случайном классе):

public void doImportantStuff(AbstractToolbox toolbox) {
//important stuff!
//this obviously won't work
    List<AbstractToolbox> items = toolbox.getItems();
//do some stuffwith all items
}

Теперь проблема в том, что в Java коллекции с обобщениями не являются ковариантными (надеюсь, это термин, который я ищу), и я могу Не назначайте ArrayList списку List . Единственное решение, которое я вижу здесь, - это продублировать код и создать версию для каждого типа, но это явно отстой (что, если бы у нас было больше классов, реализующих AbstractToolbox с разными списками?). О, очевидно, что вторым решением было бы отказаться от дженериков и создать обычный список, но насколько это хорошая практика?

Есть ли какие-либо шаблоны / методы проектирования для решения таких проблем?

@Edit: хорошо, так что я могу быть недостаточно точным. Я хочу, чтобы все классы, которые расширяют AbstractToolbox, имели список определенных классов, которые расширяют AbstractItem, а затем мне нужен метод, который будет принимать AbstractToolbox в качестве параметра и что-то делать с элементами в своем списке (используя классы, которые будут определены в AbstractItem, чтобы все элементы каждого возможного списка действительно имели их).

10
задан Mateusz Dymczyk 21 September 2010 в 19:31
поделиться