>Java >java지도 시간 >Java 9의 불법 반사 액세스란 무엇이며 어떻게 나타납니까?

Java 9의 불법 반사 액세스란 무엇이며 어떻게 나타납니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-05 15:12:10302검색

What is Illegal Reflective Access in Java 9 and How Does It Manifest?

불법 반사 액세스

Java 9에서 불법 반사 액세스는 강화된 캡슐화 원칙을 위반하는 방식으로 반사 API가 사용되는 상황을 의미합니다. 모듈 시스템에 의해 도입되었습니다. 이는 한 모듈의 코드가 적절한 인증 없이 다른 모듈에 있는 비공개 또는 보호된 클래스 멤버에 액세스하려고 시도할 때 발생할 수 있습니다.

불법 반사 액세스 정의

불법 반사 액세스

  • 다른 클래스의 비공개 또는 보호 멤버에 액세스하는 반사 작업으로 정의됩니다. module
  • 다른 모듈에 있는 클래스의 비공개 메서드 호출
  • 다른 모듈에 있는 클래스의 마지막 필드 수정
  • 공개적으로 표시되지 않는 클래스의 인스턴스 생성 다른 모듈에서

트리거 상황

다음과 같은 경우 불법 반사 액세스가 트리거됩니다.

  • 한 모듈의 클래스가 리플렉션을 사용하여 명시적으로 지정되지 않은 다른 모듈에 있는 클래스의 비공개 또는 보호 멤버에 액세스합니다. 모듈 선언이나 VM 인수를 통해 첫 번째 모듈에 노출됩니다.
  • 한 모듈의 클래스는 리플렉션을 사용하여 다른 모듈에 있는 클래스의 비공개 메서드를 호출합니다. 첫 번째 모듈에 명시적으로 노출되지 않습니다.
  • 한 모듈의 클래스는 리플렉션을 사용하여 첫 번째 모듈에 명시적으로 노출되지 않은 다른 모듈에 있는 클래스의 최종 필드를 수정합니다.
  • 클래스 한 모듈에서는 리플렉션을 사용하여 다른 모듈에서는 공개적으로 표시되지 않는 클래스의 인스턴스를 생성합니다.

모듈 시스템 및 완화 캡슐화

Java 9에서는 제한된 특정 형태의 반사 액세스를 허용하는 완화-강력 캡슐화 규칙을 도입했습니다. 특히, 모듈의 런타임 시스템이 모듈의 패키지를 열어 이름이 지정되지 않은 모듈(예: 클래스 경로의 코드)에 코드를 작성할 수 있습니다. 이 옵션을 사용하여 런타임 시스템을 호출하고 리플렉션 사용에 성공하면 "불법적인" 리플렉션 액세스가 발생한 것입니다.

경고 메시지

불법 반사 접근이 발생하면 다음과 같은 형식으로 경고 메시지가 출력됩니다.

WARNING: 불법 반사 접근에 의한 불법 반사 접근 $PERPETRATOR에서 $VICTIM으로

여기서:

  • $PERPETRATOR는 반사 작업을 호출한 코드와 코드 소스(JAR 파일 경로)를 포함하는 유형의 정규화된 이름입니다. ) 가능한 경우.
  • $VICTIM은 포함된 멤버의 정규화된 이름을 포함하여 액세스되는 멤버를 설명합니다. 입력하세요.

위 내용은 Java 9의 불법 반사 액세스란 무엇이며 어떻게 나타납니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.