2010-08-16 3 views
2

얘들 아, 하나는 내가 this book에서 만난 문장의 논리적 인 설명을 줄 수 : 당신은 그것을 도움이 T 아래 및 null의 종류에 의해 제한 간격의 모든 유형을 포함하는 것으로 ? extends T 생각 찾을 수 있습니다 null이 "모든 참조 유형의 하위 유형"이라고 불리는 이유는 무엇입니까?

여기서 null의 유형은 모든 참조 유형의 부속 유형입니다 ( ).

감사합니다.

+0

당신이 묻는 부분이 아니지만, 나는 "아래의 null과 T 위의 유형으로 경계 지어진"이라는 문장을 좋아하지 않습니다. 'null'은 * any * 타입의 참조에 캐스트 될 수 있기 때문에'T'보다 "특정"적임을 느낍니다. 그러면 인터벌이 조금 엉뚱한 것 같아요. 하지만 내 자신의 수학적 결함이있는 해석을 바탕으로 : P –

+0

@ 팀 : Tim, 나는 "subclass가된다"라는 말은 나에게 구체적이며 실용적인 사용법 + 타입 계층 구조와 OOP에 대한 실제 속성을 만들어주기 때문에이 다소 직관적 인 논리에 대해 완전히 동의합니다. @ JRL – Max

답변

4

난 그냥 참조 형식에 null 참조를 지정할 수 있다는 것을 의미한다고 생각합니다. 그것은 그것에 대해 끔찍하게 도움이되는 생각으로 나를 때리지 않습니다.

Java 언어 사양 (section 4.1)에 널 유형에 대한 대답이 있습니다

또한 특별한 널 유형, 에 이름이 표현 널의 유형이 있습니다. null 형식에는 이름이 없기 때문에 null 형식의 변수 을 선언하거나 null 형식으로 을 캐스팅 할 수 없습니다. null 참조 은 null 형식의 표현식의 유일한 값입니다. null 참조는 항상 참조 유형으로 전송 될 수 있습니다. 실제로 프로그래머는 null 유형 을 무시할 수 있으며 null은 단순히 특수 리터럴이며 어떤 참조 유형일 수있는 것처럼 가장합니다.

+1

그래서 여기 핵심 문구는 'null 참조는 항상 모든 참조 유형으로 변환 될 수 있습니다.'이것은 auhthor가 '모든 참조 유형의 하위 유형입니다'라고 주장하게 만듭니다. 이상한 사람 : 이것을 가리켜 주셔서 감사합니다. – Max

+0

그것은 자바의 타입 시스템이 불건전하다는 것을 말해 주므로 유용한 사고 방식입니다. 따라서 이것은 꽤 쓸모 없게 만듭니다. –

0

즉, null은 모든 유형이 될 수 있습니다.

하위 클래스가 DogAnimal 클래스가있을 수 있습니다. 값이 nullAnimal 변수가있는 경우 nullAnimal 유형인지 Dog 유형인지 알 수 없습니다. 둘 다 똑같이 유효합니다.

+0

나는 그것이 약간기만적인 진술이라고 생각한다. 값'null'은 항상 하나의 타입, 즉'null' 타입을가집니다. "모든 유형"일 수 없습니다. 타입 시스템은 모든 참조 타입의 하위 타입이되도록 'null'타입 ('null'값만이 존재합니다)을 정의합니다. 귀하의 예제에서, 이것은 마치 Animal의 서브 클래스로 정의 된 묵시적인'null' 클래스를 가졌던 것과 같기 때문에'null' (이'null' 클래스의 인스턴스) 값을 할당하는 것이 유효합니다. 'Animal' 타입의 변수에 저장합니다. – Gian

-1
null instanceof T 

프로그램의 모든 종류의 세트에서 두 종류, 즉

+0

'System.out.println (null instanceof Object);''false'를주는 것은 어떻습니까? – Max

+0

그게 전부 사실이 아닙니다. 자바 제작자는 그 사건을 항상 거짓으로 만들기 위해 길을 나서 갔다. –

+0

나는 당황했다. 나는 방금 생각했다! – Ladlestein

2

유형 부분 순서를 형성하는 모든 종류의 T., 마찬가지입니다, (그들 사이의 관계가있을 수 있습니다 즉 T1 < T2 - T2는 어떤 의미에서 T1의 부속 유형입니다). 관련없는 클래스 계층 구조에는 해당 관계가 정의되어 있지 않습니다.

기본적으로 이것은 ? extends T이 나타내는 유형 집합의 모든 구성원이 보다 작고 null보다 큼을 나타냅니다. 값 null을 참조에 할당하는 것이 항상 유효하기 때문에 null은 모든 것의 부속 유형으로 존재합니다. 공식적으로

더 :

this interesting article에서
∀x ∈ ? extends T. null ≥ x ≥ T 
2

, 발췌 :

자바는 널 유형이 있습니다.Pre-JLS3, null 유형은 공식적으로 모든 유형의 하위 유형이 아니며 null 참조는 null 유형을 제외한 모든 유형의 값인 이 아니 었습니다. 법령은 실용적인 이유로 모든 참조 유형에 캐스팅 할 수있는 null 참조 을 만들었습니다. JLS3 은의 하위 유형으로 널 유형을 정의 (이 목록 목록의 하위 유형은. 당신은 캡처 변환과 법령을 알고있다. 아니더라도 목록 형식 매개 변수에 할당 목록 을 만드는 법령과 유사) 모든 유형이 이므로 매우 아래쪽처럼 처럼 보입니다.

+0

주제에 대한 귀하의 열정을 높이 평가하십시오. 나는 그 괴물 널 타입에 대해 몰랐다. – Max

+0

스칼라를 알고 있다면, 자바의'null' 타입은 스칼라 타입'Nothing'과 유사합니다. 이것은'AnyRef'의 부속 타입 인 모든 타입의 모든 참조 타입의 하위 타입입니다. – Jesper

관련 문제