Eclipse w praktyce cz. 3 – zaawansowane możliwości edytora kodu

post_img

Kolejna z części artykułu „Eclipse w praktyce” opisuje wykorzystanie zaawansowanych możliwości edytora kodu Java, w szczególności:

  • Content Assist
  • Auto Complete
  • Quick Fix

Uwaga: niektóre przykłady skrótów klawiaturowych wymagają wprowadzenia zmian w konfiguracji Eclipse.

1. Ctrl+Space, Ctrl+1 Programming

Myślę, że najprzydatniejsze w Eclipse są te dwie konfiguracje klawiszy. Trudno wymienić wszystkie miejsca, w których mogą się przydać. Zazwyczaj, jeśli chcesz zrobić coś z kodem i masz wrażenie, że może to być zautomatyzowane, wciśnij Ctrl+1 lub Ctrl+Space.

Ctrl Space – Content Assist (A.K.A auto-complete)

Uzupełnianie kodu

Content Assist uzupełnia pisany kod o domyślne rozwinięcie lub podaje listę dostępnych możliwości.

Np. piszemy „Syst” i wciskamy Ctrl Space.

Eclipse podaje listę możliwości do wyboru: System, SystemColor, SystemException, …

Wybieramy System [Enter]. Jeśli wybralibyśmy klasę z innego pakietu, Eclipse automatycznie doda wymagany import.

Piszemy kropkę.

Content Assist rozwija dostępne pola i metody klasy System.

Jeśli wybierzemy metodę, Eclipse automatycznie wypełnia jej parametry.

Deklaracje zmiennych

W miejscu, gdzie powinna pojawić się deklaracja, wywołać Content Assist. Np. dla deklaracji obiektu klasy ArrayList otrzymamy 2 podpowiedzi nazwy: arrayList oraz list.

Podpowiedzi parametrów

Często zdarza się, że mamy do czynienia z wywołaniem metody, która posiada wiele parametrów. Ctrl Space umożliwia podgląd ich typów oraz nazw. Parametr, który odpowiada położeniu kursora jest pogrubiony.

Tworzenie klas anonimowych

new Comparator();

Kursor pomiędzy nawiasami. Ctrl Space podpowiada “Comparator() Anonymous Inner Type”

[Enter]. Otrzymujemy implementację klasy anonimowej.

Wystarczy tylko wypełnić kod metody:

new Comparator() {

public int compare(Object arg0, Object arg1) {

// TODO Auto-generated method stub

return 0;

}

};

Korzystanie z domyślnych szablonów kodu

Wpisujemy for i Ctrl Space. Wybieramy „for – iterate over collection”. Dostajemy kod:

Wpisujemy nazwę iteratora, [Tab], nazwę kolekcji, [Tab], klasę elementów listy (przydatny Content Assist), [Tab], nazwę zmiennej odpowiadającej elementowi listy.

W podobny sposób możemy generować bloki try-catch, switch-case, instanceof, toArray,
if-else, gettery, settery, metodę main, toString, pętle while, sysout (System.out.println) itp.

Ctrl Space dwukrotnie – powoduje wylistowanie tylko szablonów kodu.

Domyślny konstruktor

Ctrl Space w miejscu, gdzie chcemy wstawić konstruktor.

Content Assist w JavaDocs

/**

*

*/

public int max(int a, int b) {

return a > b ? a : b;

}

Kursor w bloku komentarza, piszemy @p i akceptujemy podpowiedź @param. Wciskamy spację i Ctrl Space. Otrzymujemy podpowiedź pierwszego parametru. W drugiej linijce dostaniemy podpowiedź dla drugiego parametru.

Konfiguracja

Content Assist posiada możliwość konfiguracji:

Window Preferences › Java › Editor › Content Assist

Polecam “Completion overwrites” oraz “Guess filled method arguments”.

Ctrl 1 – Quick Fix

Quick Fix, jak nazwa wskazuje służy zazwyczaj do poprawiania błędów, ale można tej funkcjonalności używać również do zwyczajnego pisania kodu.

Rename in file

public static void main(String[] args) {

String string = „Quick fix”;

System.out.println(string);

}

Kursor na zmiennej string. Wciskamy Ctrl 1 i wybieramy „Rename in file”. Wpisujemy nazwę qFix, a Eclipse zmienia nazwę zmiennej we wszystkich odwołaniach. W tym miejscu trzeba uważać, żeby nie modyfikować zmiennych lub metod widocznych na zewnątrz klasy. Do takich zmian nazw używamy Refactor – Rename (Alt Shift R).

public static void main(String[] args) {

String qFix = „Quick fix”;

System.out.println(qFix);

}

Split variable declaration

Kursor na zmiennej qFix. Wciskamy Ctrl 1 i wybieramy „Split variable declaration”

public static void main(String[] args) {

String qFix;

qFix = „Quick fix”;

System.out.println(qFix);

}

Rozdzielenie deklaracji zmiennej od przypisania wartości jest przydatne np., gdy chcemy wyłączyć deklarację przed blok if lub try-catch.

Assign parameter to new field

W powyższym kodzie kursor na parametrze args, Ctrl 1 i wybieramy „Assign parameter to new field”.

private static String[] args;

public static void main(String[] args) {

QuickFix.args = args;

String qFix;

qFix = „Quick fix”;

System.out.println(qFix);

}

Wartość parametru została przypisana do nowo stworzonego pola. Gdyby był to parametr metody niestatycznej, pole również nie posiadałoby kwalifikatora static.

Assign statement to new local variable

System.getProperties()

Kursor w tej samej linijce, Ctrl 1, „Assign statement to new local variable”.

Properties properties = System.getProperties();

Eclipse przypisuje wartość zwracaną przez metodę do nowej zmiennej, automagicznie przypisując jej typ i nazwę.

Introduce new local with casted type

public void instanceofAssignment(Object test) {

if (test instanceof String) {

}

}

Kursor na instanceof, Ctrl 1, wybieramy „ Introduce new local with casted type”.

public void instanceofAssignment(Object test) {

if (test instanceof String) {

String string = (String) test;

}

}

Alt Shift Z – surround lines

Wprawdzie ani Ctrl Space, ani Ctrl 1, ale w temacie.

Powoduje umieszczenie zaznaczonego fragmentu kodu wewnątrz wybranego rodzaju bloku:

2. Poprawianie błędów

Ctrl 1 – Quick Fix

Ten skrót został już dosyć obszernie omówiony w poprzednim rozdziale. Tu opiszę jego zastosowanie przy poprawianiu błędów.

Add import

Ctrl 1 najczęściej używany jest do dodawania brakującego importu.

List list = new ArrayList();

Kursor na List lub ArrayList i Ctrl 1.

Create a new method

public class QuickFixErrors {

public int addSquares(int a, int b) {

return sqr(a) + sqr(b);

}

}

Wywołanie sqr przedstawiane jest jako błąd. Prawie każdy błąd można rozwiązać przy użyciu Ctrl 1, a na pewno warto spróbować ;). Jeśli użyjemy tego w tym przypadku, Eclipse utworzy prywatną metodę sqr, z odpowiednimi parametrami i zwracanym typem.

public class QuickFixErrors {

public int addSquares(int a, int b) {

return sqr(a) + sqr(b);

}

private int sqr(int i) {

// TODO Auto-generated method stub

return 0;

}

}

Add parameter

public class QuickFixErrors {

public int addSquares(int a, int b) {

return power(a, 2) + power(b, 2);

}

private int power(int i) {

return i*i;

}

}

W tym przypadku dodaliśmy dodatkowy parametr do wywołań funkcji power. Eclipse zgłasza błąd niezgodności liczby parametrów. W tym przypadku Ctrl 1 daje możliwość usunięcia dodatkowego argumentu z wywołać lub dodanie tegoż argumentu jako parametr do deklaracji metody. Po wybraniu tego drugiego:

public class QuickFixErrors {

public int addSquares(int a, int b) {

return power(a, 2) + power(b, 2);

}

private int power(int i, int j) {

return i*i;

}

}

Add unimplemented methods

Przydatna funkcja przy implementowaniu interfejsu lub rozszerzaniu klas abstrakcyjnych:

Exception handling

public void handling() {

try {

Thread.sleep(100);

} catch (NullPointerException e) {

e.printStackTrace();

}

}

Kursor w linijce z Thread.sleep(100), Ctrl 1. Mamy do wyboru 3 możliwości:

  • Add throws declaration – dodanie wyrzucania wyjątku przez metodę
  • Add catch clause to surrounding try – dodaje kolejnego catcha
  • Surround with try/catch – wstawia blok try-catch wewnątrz istniejącego

Class casts

String elt = list.get(0);

W tym przypadku Ctrl 1 umożliwia zrzutowanie do Stringa lub zmianę typu elt na Object:

String elt = (String) list.get(0);

lub

Object elt = list.get(0);

Ctrl . Ctrl , – move to the next (previous) problem

Skacze do następnego błędu lub warninga w kodzie.

Ctrl Shift O – Organize imports

Dodaje potrzebne importy, usuwa zbędne.

Można stosować wewnątrz pliku, na całym pakiecie lub nawet całym projekcie.

Shift Alt S Clean Up Wizard

Dobre narzędzie do automatycznego, bezpiecznego czyszczenia kodu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *