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

时间:2010-02-18 14:26:20

标签: java

假设我有以下Java代码。

    public class Example {
        public static void main(String[] args){
            Person person = new Employee();
        }
    }

如何确定Person是一个类还是一个接口?

因为Employee类可以扩展它,如果它是一个类,或者如果它是一个接口就实现它。

在两种情况下人员=新员工(); 有效。

4 个答案:

答案 0 :(得分:9)

如果你还不知道Person是一个接口还是一个类本身/接口本身的文档类(你正在使用它,大概是你有一些文档或什么?),你可以用代码告诉:

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

详情here

修改:根据您的评论,这是您可以使用的袖珍实用程序:

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);
    }
}

用法:

java CheckThingy Person

答案 1 :(得分:5)

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

如果在你的例子中,你只是使用了一些类/接口,那么你不应该知道或关心Person类是具体的还是抽象的,或者是接口,只要它有一个定义良好的API

答案 2 :(得分:2)

您可以使用isInterface()类的Class方法执行此操作。你这样做的原因是什么?你有一个记录不完整的图书馆,你需要弄清楚吗?也许如果我们知道你想要做什么,就可以提供更优雅的解决方案。

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

if(Person.class.isInterface())
    ...

编辑:阅读你对T.J.的评论克劳德的回答。这就是我要做的事情:

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

答案 3 :(得分:2)

只需在IDE中的Person上执行 Ctrl +左键单击和/或阅读其来源和/或javadoc。

如果您尚未使用IDE,我可以推荐EclipseIntelliJ IDEA。如果你正在使用Java EE(JSP / Servlet和那种东西),要么抓住Eclipse for Java EE ,要么支付IDEA Ultimate edition