Programing

을 하는가?을 하는가?을 하는가?자바에서 평균은?자바에서 평균은?자바에서 평균은?

c10106 2022. 5. 9. 21:50
반응형

을 하는가?자바에서 평균은?

내 질문은 위와 같다.미안, 아마 중복된 것 같은데, 그 예로는 찾을 수가 없었어.<?>맨 끝에

왜 그냥 사용하지 않으세요?Class매개 변수로서?

Class매개 변수화할 수 있는 클래스이므로 구문을 사용할 수 있음Class<T>어디에T유형이다.글로써Class<?>, 당신이 선언하는 것은Class어떤 유형이든 될 수 있는 개체(?와일드카드(Wildcard).Class유형은 클래스에 대한 메타 정보를 포함하는 유형이다.

그의 특정 유형을 특정하여, 다음을 사용하여 일반 유형을 참조하는 것이 항상 좋은 관행이다.Class<?>당신은 이 관행을 존중하고 있다(자각하고 있다)Class매개 변수화 가능) 그러나 특정 유형을 가지도록 매개 변수를 제한하지 마십시오.

제네릭 및 와일드카드에 대한 참조: http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html

에 대한 참조Class객체 및 반영(자바 언어의 특징: https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html

이것<?>짐승이다.종종 혼란과 오류로 이어지기도 하는데, 왜냐하면, 당신이 그것을 처음 보았을 때, 그리고 나서 믿기 시작했기 때문이다.<?>모든 자바 유형의 와일드카드.그게 바로..사실이 아니다 <?>없는 유형이고, 약간 심술궂은 차이점.

면이면 문면 다 함께 가 되지 Class 두 라인이 모두 작동하고 컴파일:

Class anyType = String.class;
Class <?> theUnknownType = String.class;

그러나 - 컬렉션과 함께 사용하기 시작하면 이상한 컴파일 시간 오류가 나타난다.

List<?> list = new ArrayList<Object>();  // ArrayList<?> is not allowed
list.add("a String");                    // doesn't compile ...

우리의List<?>어떤 종류의 물건에나 적합한 수집품이 아니다.그것은 오직 한 가지 유형, 즉 신비주의적인 "미개척 유형"만을 저장할 수 있다.확실히 진짜 타입은 아니야

이것은 클래스 참조가 클래스 객체에 대한 참조를 포함할 수 있다는 것을 의미한다.

기본적으로 "클래스"와 같지만, 당신은 당신의 코드를 읽은 다른 사람들에게 당신이 제네릭에 대해 잊지 않았다는 것을 보여주고 있을 뿐, 당신은 어떤 클래스 오브젝트라도 담을 수 있는 참조를 원할 뿐이다.

브루스 에켈, 자바에서 생각하는 것:

Java SE5에서 클래스<?>은 평이한 클래스보다 선호되는데, 비록 등가성이고 평이한 클래스는 보시다시피 컴파일러 경고를 생성하지 않는다.클래스의 이점[?> 그것은 당신이 우연히 또는 무지에서 비특정 계급 참조만을 사용하고 있는 것이 아님을 나타내는 것이다.특정 버전이 아닌 버전을 선택하셨습니다.

그것은 문자 그대로다.이것은 네가 어떤 종류의 수업을 하는지 모른다는 것을 의미해.Class인스턴스가 표시되지만 여전히 일반 버전을 사용하고 있는 경우.

  • 만약 당신이 그 수업을 안다면, 당신은Class<Foo>예를 들어 캐스팅 없이 새로운 인스턴스를 만들 수 있는 방법:Foo foo = clazz.newInstance();
  • 제네릭을 전혀 사용하지 않으면 최소한 경고를 받게 될 것이다(그리고 제네릭을 사용하지 않는 것은 일반적으로 어려운 부작용을 초래할 수 있기 때문에 금지된다).

제네릭스에서 알 수 없는 유형은 와일드카드 문자 "?"로 표현된다.공식적인 예를 들자면 여기를 읽어라.

그것은 어떤 종류의 것이든(알 수 없는) 클래스를 의미한다.

Java 제네릭 자습서를 읽어야 더 잘 이해할 수 있다.

즉, 클래스 참조 유형은 모든 유형을 나타내는 클래스 객체를 포함할 수 있다.JVM이 어떤 유형을 로드하면 그 유형을 나타내는 클래스 객체가 JVM에 존재할 것이다. 우리는 반사 패키지에서 매우 많이 사용되는 클래스 객체로부터 유형에 관한 메타데이터를 얻을 수 있다.

"myPackage"라는 클래스가 있다고 가정합시다.마이클래스"그것이 동급 경로에 있다고 가정하면, 다음 문장은 동등하다.

Class<?> myClassObject = MyClass.class; //compile time check

Class<?> myClassObject = Class.forname("myPackage.MyClass"); //only runtime check

이것은 클래스와 비슷한 방식으로 작동한다.> 메서드 인수에도 참조가 있다.

클래스 "클래스"에는 공용 생성자가 없다는 점에 유의하십시오.따라서 "Class" 인스턴스를 "new" 연산자로 인스턴스화할 수 없다.

참조URL: https://stackoverflow.com/questions/9921676/what-does-class-mean-in-java

반응형