2011-10-17 2 views
9

나는 자바 코드를보고 있는데, 자주 본 코드가있다.Foo.class 그것은 무엇을합니까?

Foo.class 

이것은 클래스 유형을 나타내는 데 사용됩니까? 그 비슷합니다

Foo.GetType(); 
typeof(Foo); 

C#에서입니까?

무엇을 사용하고 있습니까? 그리고 그것의 의미는 무엇입니까?

+1

관련 정보 : System.Type은 .Net의 일반적인 유형이며 C#과 관련이 없습니다. Java 언어 자체와는 달리 JVM에서 '클래스'유형에 대해 동일하거나 부합하는지 여부는 알 수 없습니다. –

+0

Java에서 오는이 정보를 찾기가 매우 어렵습니다. 나는 "C# class object", "C# class to reference"를 검색했고 이것을 모르는 다른 많은 용어는 C#에서'Type'이라고 불렀습니다 - 당신이 얻는 유일한 것들은 튜토리얼과 OOP 소개입니다. 그 질문에 대해 고마워 .-) – Mitja

답변

12

예, Java의 Foo.class은 C#의 typeof(Foo)과 같습니다. 클래스 리터럴에 대한 자세한 내용은 section 15.8.2 of the JLS을 참조하십시오.

이 객체의 실행 시간 Type을 가져옵니다 기준에 GetType() 전화로 하지 동일합니다. 그 자바 상당은 someReference.getClass()입니다.

Java 코드에서 C#보다 더 자주 볼 수있는 한 가지 이유는 제네릭과 관련되어 있습니다. 그것은 같은 것을 가지고 완전히 이상한 아니다 :

public class Generic<T> 
{ 
    private final Class<T> clazz; 

    public Generic(Class<T> clazz) 
    { 
     this.clazz = clazz; 
    } 
} 

이 자바에만 필요 등 반사의 클래스이 있습니다 실행 시간 접속으로 인해 에 형의 삭제, 제네릭 형식의 이에 객체를 할 수 실행 시간에 타입 인자를 결정한다.

+0

끝내. 감사. – DarthVader

+0

위대한. 나는 그들이 그것이 clazz라고 부르는 것을 조금 우스운 것을 느낀다 :) – DarthVader

+2

@ user177883 : 글쎄, 그것은 하나의 관습이다. 다른 사람들은 다른 이름을 사용할 수 있습니다. 'class'가 키워드이기 때문입니다. –

2

클래스이라고하는 Java의 특수 클래스가 있습니다. 그것은 오브젝트을 상속합니다. 그 인스턴스는 java 런타임의 클래스와 인터페이스를 나타내며 또한 열거 형, 배열, 기본 Java 유형 (boolean, byte, char, short, int, long, float, double) 및 키워드 void을 나타냅니다. 클래스가로드되거나 클래스 로더의 defineClass() 메소드가 JVM에 의해 호출되면 JVM은 Class 객체를 만듭니다.

자바를 사용하면 여러 가지 방법으로 클래스의 해당 클래스 객체를 만들 수 있습니다. 이고 .class는 그 중 하나입니다. 예 :

Class c1 = String.class; 
관련 문제