Как автоматически передать все вложенные статические классы в вызов метода в качестве параметра?

Есть ли способ получить массив статических классов внутри Network класс (определенный ниже), и передать атрибут каждого класса class в параметр вызова метода kryo.register?

public class Network {
    // Classes to be transferred between the client and the server
    public static class A {
        public int id;
        public String name;
    }

    public static class B {
        public int id;
        public int x;
        public int y;
    }

    // Rest of the classes are defined over here

    static public void register(EndPoint endPoint) {
        Kryo kryo = endPoint.getKryo();

        // typical way of registering classes so that kryonet can use it
        // kryo.register(A.class);
        // kryo.register(B.class);
        // the rest of the classes are registered with kryonet over here

        // my attempt at solving the question,
        // but for some reason this doesn't work?
        for(Object o : Network.class.getDeclaredClasses()) {
            kryo.register(o.getClass());
        }
    }
}

1 ответ

Решение

Проблема в том, что вы используете класс класса, а это не то, что вам нужно. если вы использовали правильный тип для результата getDeclaredClasses() позвони, это было бы более очевидно:

    for(Class<?> c : Network.class.getDeclaredClasses()) {
        kryo.register(c);
    }

(кстати, вы уже используете отражение -> getDeclaredClasses()).

Другие вопросы по тегам