簡體   English   中英

上課 <?> 匿名內部類的對象

[英]Get Class<?> object of anonymous inner class

我有一個需要Class對象的方法,該方法將構造多次:

Class<?> clazz = MyClass.class;
register(clazz);

對於某些寄存器,我想使用匿名類,但是為此,我需要使用它的Class<?>對象。

我將使用它來注冊多個非常相似的類,但是(在此示例中)具有不同的名稱:

String[] nameList = { "name1", "name2" }; // and a lot more
for (final String name : nameList) {
    // How would I do the next line?
    // It is supposed to pass the Class<?> for an anonymous class overriding getName()
    register(AnAnonymousClass { 
        @Override
        public String getName() {
            return name;
        });
    }
}

有什么辦法可以做到,還是我的系統存在設計缺陷? 如果是,那我將如何實現呢? 順便說一句,我不能通過構造函數傳遞名稱,因為構造函數必須對所有類具有相同的參數(因為它將使用反射來構造)。

我認為Peter Lawrey是對的,因為您不會在循環中創建不同的類,而只是創建實例。

您需要“注冊”自己的所有類嗎? 如果是這樣,則可以為它們創建一個包含復制方法的接口。 您無需注冊類並使用反射來創建實例,而是注冊原始對象並復制該對象,如下所示:

    // Interface with methods that all these classes have in common 
interface MyClassInterface {
    MyClassInterface copy();
    String getName();
}

@Test
public void testMyClasses() {
    List<String> names = new ArrayList<>();

    // Example list of names
    names.add("adam");
    names.add("ben");
    names.add("carl");

    List<MyClassInterface> objects = new ArrayList<>();


    // Define specialized class with special implementation of getName
    class MyClassWithName implements MyClassInterface {
        private String name;
        public MyClassWithName(String name) {
            this.name = name;
        }

        @Override
        public MyClassInterface copy() {
            return new MyClassWithName(name);
        }

        @Override
        public String getName() {
            return name;
        }

    }

    for (final String name: names) {
        // "register" object
        objects.add(new MyClassWithName(name));
    }

    for (MyClassInterface object: objects) {
        System.out.println("original name " + object.getName());
        // Construct copies as needed
        MyClassInterface object2 = object.copy();
        System.out.println("copy name " + object2.getName());
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM