2010-12-31 5 views
3

В последнее время мне часто приходится читать Java-код, как это:Возможно ли в любой Java IDE свернуть определения типов в исходном коде?

LinkedHashMap<String, Integer> totals = new LinkedHashMap<String, Integer>(listOfRows.get(0)) 
for (LinkedHashMap<String, Integer> row : (ArrayList<LinkedHashMap<String,Integer>>) table.getValue()) {  
    for(Entry<String, Integer> elem : row.entrySet()) { 
     String colName=elem.getKey(); 
     int Value=elem.getValue(); 
     int oldValue=totals.get(colName); 

     int sum = Value + oldValue; 
     totals.put(colName, sum); 
    } 
} 

В связи с определениями длинных и вложенных типа простого алгоритм становится весьма нечетким. Поэтому я хотел, чтобы я мог удалить или свернуть определения типа с моей IDE, чтобы увидеть код Java без типов, таких как:

totals = new (listOfRows.get(0)) 
for (row : table.getValue()) {  
    for(elem : row.entrySet()) { 
     colName=elem.getKey(); 
     Value=elem.getValue(); 
     oldValue=totals.get(colName); 

     sum = Value + oldValue; 
     totals.put(colName, sum); 
    } 
} 

Лучший способ, конечно, будет разрушаться определения типа, но при перемещении мыши над переменная показывает тип как всплывающую подсказку. Есть ли Java IDE или плагин для IDE, который может это сделать?

+0

.NET (Visual Studio) имеет эту функцию, они называют это "область". Я попытался найти эту функцию в Eclipse несколько месяцев назад, но ничего не нашел. :( –

ответ

5

IntelliJ IDEA преобразует типы в правой части декларации в <~>. Так что:

Map<Integer, String> m = new HashMap<Integer, String>(); 

появится складками, как:

Map<Integer, String> m = new HashMap<~>(); 

Это устанавливаемое через Editor/Code Folding/Generic Конструкторы и параметров метода собственности и community edition of the IDE бесплатно.


Или вы могли бы использовать Scala, который имеет тип умозаключение:

val totals = new mutable.Map[String, Int] 
for { 
    row <- table.getValue 
    (colName, value) <- row.entrySet 
} totals += (colName -> (value + totals.get(colName) getOrElse 0)