这里有一个问题要问你们这些java专家。
我在文本文件中保存了一些定义,假设它们是属性文件。我有很多不同的对象它们都实现了一个接口,我们叫它Cardable
。它保证方法附加这些定义并检索它们以便在应用程序中显示。
public interface Cardable {
public void attach(Card c);
public Card retrieve();
}
现在,当我构建这些对象的静态列表时(这些对象的类型各不相同),我将查看类型是否与定义中声明的一组类匹配,如下所示
Thing.Bag.LeatherBag= ... (definitions)
如果我们正在创建这个类(定义浓缩以显示思想)
public class LeatherBag extends Bag {
...
}
public class Bag extends Thing {
...
}
public class Thing implements Cardable {
...
}
这个过程是在预加载阶段遍历列表,并将最特定的卡分配给给定的类。这将被任意定义为,例如,指定更多的类(Thing.Bag.)。LeatherBag会比Bag更具体。)
一旦我将类名从字符串中分离出来,我将如何使用instanceof来检查对象(一旦我们验证它实现了Cardable
)是否是所有指定类的实例?Instanceof似乎与类型有关,但与包含类型/类名的字符串无关。
如果我理解正确的话,您有一个由其字符串名称表示的类,并且您想确定它是否实现了一组由其字符串名称表示的接口,以及它是否扩展了一组由其字符串名称表示的类。您可以使用Class类来完成此操作。
void isValid(String className) {
Class clazz = Class.forName(className);
Class[] interfaces = clazz.getInterfaces();
ArrayList<Class> superclasses = new ArrayList<>();
Class temp = clazz.getSuperclass();
superclasses.add(temp);
while(temp != Object.class) {
temp = temp.getSuperclass();
superclasses.add(temp);
}
}
这应该留给你interfaces
持有所有类的接口,和'超类'持有所有类的超类。您可以在这些类对象上调用class# getName,并将它们与接口/类的字符串表示形式进行比较,以查看所讨论的类是否符合您的标准。