【问题标题】:How to determine if a class which is an implemenation of an interface in java如何确定一个类是否是java中接口的实现
【发布时间】:2011-05-18 20:12:18
【问题描述】:

如果传入的 java Class 是接口 List 的实现,我需要编写一个函数来返回 true。有谁知道如何在java中做到这一点?

类似:

public boolean canConvert(Class c) {

  //return true is c is an implementation of the interface List

}

谢谢

【问题讨论】:

  • 有点奇怪的问题。在我看来,您有一个实例继承 java.lang.Class 实现 List 接口?这对我来说没有意义。你能澄清一下吗?

标签: java class interface


【解决方案1】:

有两种不同的场景:

  • 你想检查给定的是否是List的子类/实现者。从您的方法签名(Class c)来看,这就是您想要的。在这种情况下使用

    List.class.isAssignableFrom(c)
    
  • 您想查看给定对象是否是我们List 的子类/实现者的类的实例。在这种情况下,请使用 obj instanceof List,正如 Bala R 建议的那样。

【讨论】:

    【解决方案2】:

    尝试使用instanceof 运算符。

    return c instanceof List;
    

    【讨论】:

    • 如果c是一个类,你想要c.isInstance(List.class)
    • @bmargulies @Reverend 问题是if c is an implementation of。我们不知道是不是java.lang.Class
    • 这可能确实是问题的错误陈述,但我假设方法签名中的Classjava.lang.Class
    • @bmargulies 一方面是的(因此我的回答),但方法内的评论让人困惑。
    【解决方案3】:

    如果它是你做的实例

    c instanceof List
    

    如果它是一个类,那么你做

    List.class.isAssignableFrom(c)
    

    【讨论】:

      【解决方案4】:

      通过调用Class 中的this function,它可以相当广泛地回答这个问题。如果你需要具体知道它是否直接实现,你必须走数据结构。

      更具体的答案来自搜索getInterfaces的结果。

      【讨论】:

        猜你喜欢
        • 2012-08-22
        • 2013-02-14
        • 1970-01-01
        • 2022-01-22
        • 2010-10-04
        • 2012-05-08
        • 2011-06-25
        • 1970-01-01
        相关资源
        最近更新 更多