1

我已经检查了 Java 代理和 cglib,但我还没有找到任何关于我将如何开始这个项目的示例。

这是我需要做的。

我有一个界面:

public interface RoadMap<T extends City>{
    public void map(T city);
}

我有一堆不同类型的城市作为一个名为的类的内部类Cities

我希望能够通过循环遍历类的不同内部类来在运行时实现接口,Cities如下所示:

for(Class clazz : Cities.class.getDeclaredClasses()){
   //implement RoadMap interface 
}

除了类型参数需要是 clazz 类型(在 for 循环中)之外,所有实现都是相同的。

这甚至可能吗?如果是这样,我应该从哪里开始。Java 代理和 cglib 谈论了很多方法拦截,但这并不是我真正想要做的。

谢谢

4

1 回答 1

0

如果所有实现都相同,则只需要一个实现。这是一个不关心泛型类型的实现,不使用动态代理(但您可以使用动态代理做同样的事情):

public class RoadMapFactory {
    @SuppressWarnings("unchecked")
    public <T extends City> RoadMap<T> createWithRawTypes() {
        return new RoadMap() {
            @Override
            public void map(City city) {
                System.out.println("I mapped this city : " + city);

            }
        };
    }

    public static void main(String... args) {
        RoadMapFactory factory = new RoadMapFactory();
        RoadMap<SubCity1> map1 = factory.createWithRawTypes();
        map1.map(new SubCity1());
        RoadMap<SubCity2> map2 = factory.createWithRawTypes();
        map2.map(new SubCity2());
    }
}
于 2012-12-23T07:50:10.287 回答