0

所以这里有一个问题要问你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.LeatherBag 更具体。)

一旦我从字符串中取出类名,我将如何使用 instanceof 检查对象(一旦我们验证它实现Cardable)是否是所有指定类的实例?Instanceof 似乎与类型有关,但与包含类型/类名的字符串无关。

4

1 回答 1

0

如果我理解正确,您有一个由其字符串名称表示的类,并且您想确定它是否实现了一组由其字符串名称表示的接口,以及它是否扩展了一组由其字符串名称表示的类。您可以使用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 并将它们与接口/类的字符串表示形式进行比较,以查看相关类是否符合您的标准。

于 2013-04-19T20:35:33.890 回答