Wywołanie metody z pliku .class

0

Witam!
Zastanawiam się, czy da się stworzyć program, który wywołuje metodę z podanego przez użytkownika pliku .class (zawierającego klasę dziedziczącą np. po interfejsie określonym w programie) i czy da się tworzyć obiekty takich klas?

0

Najprościej gdybyś do takiego pliku wsadził metodę main, I wtedy z lini komend odpalasz tylko

java plik

0

Można, tylko trzeba sobie taką klasę załadować w runtime przez jakieś Class.forName("") i trzeba znać nazwę tej klasy, ale ta pewnie będzie pokrywać sie z plikiem .class
Musisz wtedy refleksja zrobić Class.forName("com.cośtam.MojaKlasa").newInstance(), zrzutować to na jakiś sensowny typ (np. ten twój interfejs) i dalej juz normalnie operować.

0

Skomplikowane?

        Class clas = null;;
        Object object = null;
        try
        {
            clas = Class.forName(NazwaKlasy);
            object = clas.newInstance();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
0

Ok, a w jaki sposób ustalić, z którego pliku .class ma korzystać program? Czy (jeśli mam ścieżkę do pliku) lokalizacja pliku .class może być dowolna?

0

Katalog zawierający klasę musi być wymieniony w zmiennej środowiskowej classpath.

0

Możesz również stworzyć własny ClassLoader i skorzystać z metody defineClass:
https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#defineClass(java.lang.String,%20byte[],%20int,%20int)
W ten sposób potrzebne Ci są wyłącznie dane z tego pliku.

0

to może się przyda: http://stackoverflow.com/questions/10527658/instantiate-an-object-and-invoking-a-method-via-a-class-file-using-reflection-i

a plik .class można zdekompilować javap z opcją -v lub -c, żeby poznać pola i metody, które ta klasa posiada
jak robisz to pod Windą 10, to buffor wszystkiego nie złapie, ale można zapisać do pustego pliku. Najpierw stwórz pusty plik txt w katalogu w którym masz .class:

type NUL > nazwaloga.txt

potem wystarczy zapisać output javap w pliku:

javap -v NazwaKlasy.class > nazwaloga.txt

potem otwierasz plik i raczysz się zdekompilowanym kodem :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1