Jej użycie od razu przykuło moją uwagę, przede wszystkim dlatego, że korzysta z typowego użycia typów generycznych w Javie. Zwykle generyki sprawiały mi trudność i postanowiłem tym samym sprawdzić swoją ich znajomość. Po przejrzeniu kodu źródłowego tej metody postanowiłem spróbować swoich sił i napisać własną metodę o podobnej funkcjonalności. Co jednak istotne, to zależało mi na użyciu generyków.
I tak powstała klasa poniżej.
package pl.japila.java7; import static java.lang.System.out; public class Demo { public static void main(String[] args) throws Exception { int i = getInstance(Integer.class); out.println("i=" + i); } public static <T extends Number> T getInstance(Class<T> clazz) throws InstantiationException, IllegalAccessException { return clazz.newInstance(); } }Czy dostrzegasz błąd, który popełniłem? Czy potrafisz wskazać go bez uruchamiania tej klasy? Ja niestety nie wykazałem się odpowiednią dbałością o szczegóły i umknęło mi to jedno ważne założenie. A jak u Ciebie?
Przy okazji pisania tej klasy znalazłem również sposobność, aby przetestować skrót klawiszowy w Eclipse do utworzenia statycznego importu dla System.out - Cmd+Shift+M. Spróbowałem również odszukać tej funkcjonalności przez odpalenie Quick access i tam też to można znaleźć.
Dzięki Marcinowi Stachniukowi (z Agile Development Day) mogłem nauczyć się czegoś nowego o Eclipse! Dziękuję!
Przeczytałem wpis Marcina, skomentowałem go, zrecenzowałem rozdział, popróbowałem się z generykami i jeszcze zapamiętałem dwa skróty klawiszowe w Eclipse. Nie za dużo jak na jeden dzień?! :)
Ja za to czytając ten wpis dowiedziałem się o Ctrl + 3 czyli o Quick access. Wcześniej tego nie znałem, a wyświetlenie skrótów klawaiturowych w Eclipse (Ctrl + Shift + L) nie pozwala na wyszukiwanie danego hotkey'a (w przeciwieństwie do analogicznego skrótu w Idei).
OdpowiedzUsuńRównież dziękuję, brakowało mi trochę tego!
Jeżeli chodzi o szybkie wypisywanie to wystarczy wpisać syso i CTRL+Space. Ale pewnie to znaliście.
OdpowiedzUsuń@Jacku, zdradź w końcu, co jest nie tak z kodem.
Exception in thread "main" java.lang.InstantiationException: java.lang.Integer
OdpowiedzUsuńat java.lang.Class.newInstance0(Class.java:357)
at java.lang.Class.newInstance(Class.java:325)
at pl.japila.java7.Demo.getInstance(Demo.java:14)
at pl.japila.java7.Demo.main(Demo.java:8)
Pytanie dlaczego?
Czy Integer ma konstruktor bezargumentowy? ;)
OdpowiedzUsuń