15 grudnia 2011

ManagementFactory.getPlatformMXBeans() w Javie 7 i nauka generyków

Jestem technicznym recenzentem książki Java 7 New Features Cookbook przed jej oficjalnym wydaniem na początku 2012 (pisałem o tym w Pierwszy rozdział o Java 7 od Packt) i w rozdziale 9. Database, Security and System Enhancements trafiłem na metodę java.lang.management.ManagementFactory.getPlatformMXBeans().

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ń?! :)

4 komentarze:

  1. 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).
    Również dziękuję, brakowało mi trochę tego!

    OdpowiedzUsuń
  2. Jeżeli chodzi o szybkie wypisywanie to wystarczy wpisać syso i CTRL+Space. Ale pewnie to znaliście.

    @Jacku, zdradź w końcu, co jest nie tak z kodem.

    OdpowiedzUsuń
  3. Exception in thread "main" java.lang.InstantiationException: java.lang.Integer
    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?

    OdpowiedzUsuń
  4. Czy Integer ma konstruktor bezargumentowy? ;)

    OdpowiedzUsuń