2010-02-18 5 views
6

다음 Java 코드가 있다고 가정 해 보겠습니다.Java 코드에서 클래스와 인터페이스를 식별하는 방법은 무엇입니까?

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

Person이 클래스인지 인터페이스인지 확인하는 방법은 무엇입니까?

클래스 인 경우 Employee 클래스는 클래스를 확장 할 수 있기 때문에 클래스이거나 인터페이스 인 경우 구현할 수 있습니다.

두 경우 모두 사람 person = new Employee();이 유효합니다.

+0

왜 런타임에 필요합니까? – Bozho

+1

IDE에서'Person' 만'Ctrl + Click '할 것입니다. 또한, 질문을 이해합니다. 그러나 대답을 알 수있는 어떤 가치도 보이지 않습니다 ...이 정보로 무엇을하고 싶습니까? ? – BalusC

+0

그것이 클래스인지 인터페이스인지 알면 쓸모가 없습니다. – GuruKulki

답변

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 
+0

감사 Crowder. 하지만 난 다른 사람에 의해 작성된 클래스, 그리고 나는 그들을 통해, 그래서 이런 종류의 코드 작성된, 선언 된 형식 클래스 또는 인터페이스 여부 혼란스러워지고있다. – GuruKulki

+0

죄송합니다. 두뇌 방귀. 깨닫 자마자 하향 보행을 제거하고 덧글을 남깁니다. –

+0

@gurukulki : Fair 'nuff, 위의 방법으로 알아낼 수있는 유틸리티를 만들 수 있습니다. 보고만으로는 말할 수 없습니다. –

2

당신은 ClassisInterface() 방법을 사용할 수 있습니다 귀하의 의견을 바탕으로, 여기 당신이 사용할 수있는 즉석 유틸리티입니다 이 일을하는 수업. 이 일을 한 이유는 무엇입니까? 이 사실을 알아 내야 할 곳에 문서 라이브러리가 부족합니까? 아마도 우리가 무엇을하려고했는지 알면보다 우아한 해결책을 제시 할 수있을 것입니다.

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

또는

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

편집 : T.J.에 귀하의 의견을 읽고 Crowder의 대답.

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

난 당신이 이 알고 있어야하기 때문에이 경우에, 당신이 모르는 생각이 내가 할 것 인 것이다. 확장 (Employee 클래스)을 구현하거나 구현하는 무언가를 작성하는 경우에는 문서 또는 소스 코드를 살펴 보는 것이 좋습니다.

예를 들어, 일부 클래스/인터페이스 만 사용하는 경우 잘 정의 된 Person 클래스가 구체적이거나 추상인지 인터페이스인지는 알 필요가 없습니다. API.

2

IDE에서 Ctrl+ leftclick을 입력하고 Person에 입력하거나 소스 및/또는 javadoc을 읽습니다.

아직 IDE를 사용하지 않는 경우 Eclipse 또는 IntelliJ IDEA을 권장합니다. Java EE (JSP/Servlet과 그 종류의 것들)를 수행하는 경우 Java 용 Eclipse EE을 가져 오거나 IDEA Ultimate edition을 지불하십시오.

관련 문제