假设我有以下Java代码。
public class Example {
public static void main(String[] args){
Person person = new Employee();
}
}
如何确定Person是一个类还是一个接口?
因为Employee
类可以扩展它,如果它是一个类,或者如果它是一个接口就实现它。
在两种情况下人员=新员工(); 有效。
答案 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,我可以推荐Eclipse或IntelliJ IDEA。如果你正在使用Java EE(JSP / Servlet和那种东西),要么抓住Eclipse for Java EE ,要么支付IDEA Ultimate edition。