Tomáš Záluský napsal(a):
To je dobré! :-)
getGenericSuperclass().getActualTypeArguments()

Ještě jsem si přes víkend uvědomil, že to půjde i s použitím
interface, protože existuje i

getGenericInterfaces().getActualTypeArguments()

takže tady je nová verze s interface:

package cz.makub.generika;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * Created by IntelliJ IDEA.
 *
 * @author Martin Kuba [EMAIL PROTECTED]
 */
public class Beranek {

    public static interface Plugin<V> {
        boolean execute(V param);
    }

    public static abstract class A<T> {

        public void uzijPlugin(String name) {
            try {
                System.out.println("----");
                System.out.println("plugin: " + name);
                Class<T> tClass = (Class<T>) ((ParameterizedType) 
getClass().getGenericSuperclass()).getActualTypeArguments()[0];
                System.out.println("A<" + tClass.getName() + ">");

                Class c = Class.forName(name);
                Type[] genericInterfaces = c.getGenericInterfaces();
                for (Type genericInterface : genericInterfaces) {
                    if (genericInterface instanceof ParameterizedType) {
                        Type type = ((ParameterizedType) 
genericInterface).getRawType();
                        if (type.equals(Plugin.class)) {
                            Class vClass = (Class) ((ParameterizedType) 
genericInterface).getActualTypeArguments()[0];
                            System.out.println("Plugin<" + vClass.getName() + 
">");
                            if (tClass.equals(vClass)) {
                                System.out.println("jde to");
                            } else {
                                System.out.println("nejde to");
                            }
                        }
                    }
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

        }
    }


    public static class PotomekAStringovy extends A<String> {
    }

    public static class PluginStringovy implements Plugin<String> {
        public boolean execute(String param) {
            return false;
        }
    }

    public static class PluginIntegerovy implements Plugin<Integer> {
        public boolean execute(Integer param) {
            return false;
        }
    }

    public static void main(String[] args) {
        PotomekAStringovy pas = new PotomekAStringovy();
        pas.uzijPlugin("cz.makub.generika.Beranek$PluginStringovy");
        pas.uzijPlugin("cz.makub.generika.Beranek$PluginIntegerovy");
    }
}


Makub



--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [EMAIL PROTECTED]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem