[英]get the enclosing class object from anonymous inner class as function parameter
[英]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.