얘들 아, 하나는 내가 this book에서 만난 문장의 논리적 인 설명을 줄 수 : 당신은 그것을 도움이 T
아래 및 null
의 종류에 의해 제한 간격의 모든 유형을 포함하는 것으로 ? extends T
생각 찾을 수 있습니다 null이 "모든 참조 유형의 하위 유형"이라고 불리는 이유는 무엇입니까?
여기서
null
의 유형은 모든 참조 유형의 부속 유형입니다 (
).
감사합니다.
얘들 아, 하나는 내가 this book에서 만난 문장의 논리적 인 설명을 줄 수 : 당신은 그것을 도움이 T
아래 및 null
의 종류에 의해 제한 간격의 모든 유형을 포함하는 것으로 ? extends T
생각 찾을 수 있습니다 null이 "모든 참조 유형의 하위 유형"이라고 불리는 이유는 무엇입니까?
여기서
null
의 유형은 모든 참조 유형의 부속 유형입니다 (
).
감사합니다.
난 그냥 참조 형식에 null 참조를 지정할 수 있다는 것을 의미한다고 생각합니다. 그것은 그것에 대해 끔찍하게 도움이되는 생각으로 나를 때리지 않습니다.
Java 언어 사양 (section 4.1)에 널 유형에 대한 대답이 있습니다
또한 특별한 널 유형, 에 이름이 표현 널의 유형이 있습니다. null 형식에는 이름이 없기 때문에 null 형식의 변수 을 선언하거나 null 형식으로 을 캐스팅 할 수 없습니다. null 참조 은 null 형식의 표현식의 유일한 값입니다. null 참조는 항상 참조 유형으로 전송 될 수 있습니다. 실제로 프로그래머는 null 유형 을 무시할 수 있으며 null은 단순히 특수 리터럴이며 어떤 참조 유형일 수있는 것처럼 가장합니다.
그래서 여기 핵심 문구는 'null 참조는 항상 모든 참조 유형으로 변환 될 수 있습니다.'이것은 auhthor가 '모든 참조 유형의 하위 유형입니다'라고 주장하게 만듭니다. 이상한 사람 : 이것을 가리켜 주셔서 감사합니다. – Max
그것은 자바의 타입 시스템이 불건전하다는 것을 말해 주므로 유용한 사고 방식입니다. 따라서 이것은 꽤 쓸모 없게 만듭니다. –
즉, null은 모든 유형이 될 수 있습니다.
하위 클래스가 Dog
인 Animal
클래스가있을 수 있습니다. 값이 null
인 Animal
변수가있는 경우 null
이 Animal
유형인지 Dog
유형인지 알 수 없습니다. 둘 다 똑같이 유효합니다.
나는 그것이 약간기만적인 진술이라고 생각한다. 값'null'은 항상 하나의 타입, 즉'null' 타입을가집니다. "모든 유형"일 수 없습니다. 타입 시스템은 모든 참조 타입의 하위 타입이되도록 'null'타입 ('null'값만이 존재합니다)을 정의합니다. 귀하의 예제에서, 이것은 마치 Animal의 서브 클래스로 정의 된 묵시적인'null' 클래스를 가졌던 것과 같기 때문에'null' (이'null' 클래스의 인스턴스) 값을 할당하는 것이 유효합니다. 'Animal' 타입의 변수에 저장합니다. – Gian
null instanceof T
프로그램의 모든 종류의 세트에서 두 종류, 즉
'System.out.println (null instanceof Object);''false'를주는 것은 어떻습니까? – Max
그게 전부 사실이 아닙니다. 자바 제작자는 그 사건을 항상 거짓으로 만들기 위해 길을 나서 갔다. –
나는 당황했다. 나는 방금 생각했다! – Ladlestein
유형 부분 순서를 형성하는 모든 종류의 T., 마찬가지입니다, (그들 사이의 관계가있을 수 있습니다 즉 T1 < T2
- T2는 어떤 의미에서 T1의 부속 유형입니다). 관련없는 클래스 계층 구조에는 해당 관계가 정의되어 있지 않습니다.
기본적으로 이것은 ? extends T
이 나타내는 유형 집합의 모든 구성원이 보다 작고 null
보다 큼을 나타냅니다. 값 null
을 참조에 할당하는 것이 항상 유효하기 때문에 null은 모든 것의 부속 유형으로 존재합니다. 공식적으로
더 :
this interesting article에서∀x ∈ ? extends T. null ≥ x ≥ T
, 발췌 :
자바는 널 유형이 있습니다.Pre-JLS3, null 유형은 공식적으로 모든 유형의 하위 유형이 아니며 null 참조는 null 유형을 제외한 모든 유형의 값인 이 아니 었습니다. 법령은 실용적인 이유로 모든 참조 유형에 캐스팅 할 수있는 null 참조 을 만들었습니다. JLS3 은의 하위 유형으로 널 유형을 정의 (이 목록 목록의 하위 유형은. 당신은 캡처 변환과 법령을 알고있다. 아니더라도 목록 형식 매개 변수에 할당 목록 을 만드는 법령과 유사) 모든 유형이 이므로 매우 아래쪽처럼 처럼 보입니다.
당신이 묻는 부분이 아니지만, 나는 "아래의 null과 T 위의 유형으로 경계 지어진"이라는 문장을 좋아하지 않습니다. 'null'은 * any * 타입의 참조에 캐스트 될 수 있기 때문에'T'보다 "특정"적임을 느낍니다. 그러면 인터벌이 조금 엉뚱한 것 같아요. 하지만 내 자신의 수학적 결함이있는 해석을 바탕으로 : P –
@ 팀 : Tim, 나는 "subclass가된다"라는 말은 나에게 구체적이며 실용적인 사용법 + 타입 계층 구조와 OOP에 대한 실제 속성을 만들어주기 때문에이 다소 직관적 인 논리에 대해 완전히 동의합니다. @ JRL – Max