如何在Java代码中识别类和接口?

如何在Java代码中识别类和接口?,java,Java,假设我有以下Java代码 public class Example { public static void main(String[] args){ Person person = new Employee(); } } 如何确定此人是类还是接口 因为Employee类可以在类中扩展它,或者在接口中实现它 在这两种情况下,Person=新员工()是有效的。如果您还不知道Person是一个接口还是一个类,根据类/接口本身的

假设我有以下Java代码

    public class Example {
        public static void main(String[] args){
            Person person = new Employee();
        }
    }
如何确定此人是类还是接口

因为
Employee
类可以在类中扩展它,或者在接口中实现它


在这两种情况下,Person=新员工()是有效的。

如果您还不知道
Person
是一个接口还是一个类,根据类/接口本身的文档性质(您正在使用它,可能您有一些文档或其他东西),您可以通过代码来判断:

if (Person.class.isInterface()) {
   // It's an interface
}
细节

编辑:根据您的评论,这里有一个现成的实用程序,您可以使用:

public class CheckThingy
{
    public static final void main(String[] params)
    {
        String name;
        Class  c;

        if (params.length < 1)
        {
            System.out.println("Please give a class/interface name");
            System.exit(1);
        }
        name = params[0];
        try
        {
            c = Class.forName(name);
            System.out.println(name + " is " + (c.isInterface() ? "an interface." : "a class."));
        }
        catch (ClassNotFoundException e)
        {
            System.out.println(name + " not found in the classpath.");
        }
        System.exit(0);
    }
}

您可以使用
类的
isInterface()
方法来执行此操作。你这么做的原因是什么?您是否有一个文档记录不完整的库,需要在其中解决这个问题?如果我们知道你想做什么,也许可以提供一个更优雅的解决方案

if(Class.forName("Person").isInterface())
    //do interface stuff
else
    //do class stuff

编辑:阅读你对T.J.Crowder答案的评论。这就是我要做的:

if(Person.class.isInterface())
    System.out.println("Person is an Interface");
else
    System.out.println("Person is a class");

我认为在这种情况下,你不知道,因为你不应该知道。如果您正在编写扩展或实现(Employee类)的内容,那么您可以查看文档或源代码

如您的示例所示,如果您只是在使用一些类/接口,那么您不需要知道或关心Person类是具体的还是抽象的,或者是一个接口,只要它有一个定义良好的API。

只需在IDE中按Ctrl+leftclick,然后/或者阅读其源代码和/或javadoc即可


如果您还没有使用IDE,我可以推荐或。如果您正在使用JavaEE(JSP/Servlet之类的东西),可以使用Eclipse for JavaEE或付费购买。

谢谢Crowder。但是我有其他人编写的类,我正在浏览它们,所以当编写这种类型的代码时,我会弄不清楚声明的类型是类还是接口。对此我很抱歉。大脑放屁。我一意识到就删除了否决票和评论。@gurukulki:Fair'nuff,您可以使用上面的内容创建一个实用程序来解决这个问题。你不能光看就知道。@Tom:就像我说的,大脑放屁。Joachim Sauer在我的帖子中很友好地修复了这个问题,然后我继续推了推。为什么在运行时需要它?我只需在IDE中
Ctrl+单击
Person
)此外,我理解这个问题,但我真的看不到知道答案的任何价值。。。你想用这些信息做什么?知道它是类还是接口是没有用的,你的意思是说。@Bozho,我有其他人编写的类,我正在浏览它们,所以当编写这种类型的代码时,我会弄不清楚声明的类型是类还是接口。在运行时,是的。在编写代码的过程中,只需检查source/javadoc(但这是一个太明显的答案,所以我不确定您是否真的问了这个问题,无论如何,我发布了一个答案)。
if(Person.class.isInterface())
    ...
if(Person.class.isInterface())
    System.out.println("Person is an Interface");
else
    System.out.println("Person is a class");