Java -如果对象的类型与字符串匹配,使用反射将数据附加到对象上



这里有一个问题要问你们这些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,并将它们与接口/类的字符串表示形式进行比较,以查看所讨论的类是否符合您的标准。

相关内容

  • 没有找到相关文章