현대 자바에서 '인스턴스'에 대한 패턴 일치
Java 14는 미리보기 기능으로 인스턴스의 패턴 매칭을 도입하여 유형 검사 중에 유형 변수를 선언하고 자동으로 변환 할 수 있습니다. 2. 패턴 매칭은 if (OBJ 인스턴스 유형 변수) 구문을 통해 구현되며 변수는 조건의 범위에서만 유효하며 캐스팅이 필요하지 않습니다. 3.이 기능은 코드의 가독성과 보안을 향상시키고 보일러 플레이트 코드를 줄이며 ClassCastException의 위험을 피합니다. 4.이를 사용할 때는 가변 범위 및 이름의 갈등에주의를 기울여야하며 기존 외부 변수를 가릴 수 없습니다. 5. Java 16 이후, 패턴 매칭의 인스턴스는 공식적인 표준 함수가되었으며, 이는 Equals 메소드 재 작성 및 다형성 처리와 같은 시나리오에 널리 적용됩니다. 기존의 명시 적 유형 변환을 대체하는 것이 좋습니다.
Java 14는 예를 들어 패턴 매칭을 소개합니다. instanceof
유형 확인 및 유형 변환 코드를 단순화하도록 설계된 중요한 언어 개선입니다. 전통적인 Java에서는 일반적으로 다음과 같은 instanceof
사용합니다.

if (obj instanceof String) { 문자열 s = (문자열) obj; System.out.println (s.length ()); }
여기서는 먼저 유형을 판단한 다음 캐스팅, 반복적이며 중복을 수행해야합니다. 패턴 매칭은이 프로세스를 더 간단하고 안전하며 읽을 수있게합니다.
pattern instanceof
패턴 일치는 무엇입니까?
Java 14 (미리보기 기능)에서 시작하여 instanceof
는 유형 패턴 변수를 직접 선언합니다. 유형이 일치하면 변수가 자동으로 유형 변환을 완료하고 if
블록 내에서 작동합니다.

문법:
if (obj instance of type variable) { // 변수는 이미 입력되었으며 캐스팅이 필요하지 않습니다}
예:

if (obj instancef string s) { System.out.println (s.length ()); // s는 자동으로 변환 된 문자열입니다 } 또 다른 { System.out.println ( "문자열이 아님"); }
이 코드 라인은 이전 명시 적 변환과 같지만 더 간단하고 안전합니다.
? 패턴 일치의 작동 메커니즘
패턴 매칭은 두 가지 작업을 결합합니다.
- 유형 확인 (판단
instanceof
) - 범위 내에서 변환을 입력하십시오
컴파일러는 다음을 보장합니다.
- 변수
s
조건true
있는 스코프로만 사용할 수 있습니다. - 유형 변환은 안전하며
ClassCastException
나타나지 않습니다
if (정수 I && i> 10) { System.out.println ( "10보다 큰 정수 :"i); }
참고 : 조건에서 새로운 변수 i
직접 사용할 수 있으며 후속 논리적 판단에도 참여할 수도 있습니다.
사용을위한 ⚠️ 예측
가변 범위 제한 : 회로도 변수는
instanceof
가true
스코프에서만 유효합니다.if (! (obj instancef string s)) { // S는 여기에서 사용할 수 없습니다! 반품; } System.out.println (s.length ()); // 액세스 가능
외부 변수를 가릴 수 없습니다 : 기존 변수 이름을 패턴 변수로 사용할 수 없습니다.
문자열 s = "hello"; if (obj instanceof string s) {} // ❌ 컴파일 오류 : 가변 복제
지지 상속 구조 : 종종
Object
에서 특정 유형 추출과 같은 다형성 물체를 다루는 데 사용됩니다.Object obj = getSomeObject (); if (dog d) { d.bark (); } else if (obj instancef cat c) { c.meow (); }
? 실제 응용 시나리오
1. equals()
메소드를 다시 작성하는 것이 더 간단합니다
전통적인 글쓰기 :
공개 부울 평등 (Object O) { if (! (o instance of person)) false를 반환합니다. 사람 p = (사람) o; return name.equals (p.name); }
패턴 매칭을 사용한 후 :
공개 부울 평등 (Object O) { person p && name.equals (p.name)의 인스턴스를 반환합니다. }
짧고 명확하며 불필요한 괄호와 변환을 피하십시오.
2. 컬렉션의 혼합 유형을 처리합니다 (권장되지는 않지만 때로는 피할 수 없음)
for (개체 항목 : MixedList) { if (string s) { System.out.println ( "String :"s.toupperCase ()); } else if (정수의 항목 인스턴스 i) { System.out.println ( "번호 :"(i * 2)); } }
? 진화 과정 (Java 버전 지원)
자바 버전 | 상태 |
---|---|
Java 14 | 기능 미리보기 (활성화해야 함) |
Java 15 | 두 번째 미리보기 |
Java 16 | 공식 릴리스 ✅ |
Java 16에서 시작하여 Pattern Matching instanceof
표준 기능이되었으며 추가 구성없이 사용할 수 있습니다.
✅ 요약 : 패턴 매칭의 이점
- 보일러 플레이트 코드 감소 (보일러 플레이트)
- 오류의 위험을 줄이기 위해 명시적인 캐스트를 제거하십시오
- 코드 가독성 및 보안을 향상시킵니다
- "유형 쿼리 사용법"의 일반적인 패턴을보다 자연스럽게 지원합니다.
기본적으로 그게 다야. 이제 instanceof
쓰고 수동으로 변환하지 마십시오. 패턴 매칭을 더 현대적이고 우아하게 사용하십시오.
위 내용은 현대 자바에서 '인스턴스'에 대한 패턴 일치의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

간결하고 효율적이며 읽을 수 있기 때문에 사전에 키가 존재하는지 확인하기 위해 IN 키워드를 사용하는 것이 좋습니다. 2. 키가 존재하는 경우 오해되지만 값은 없기 때문에 get () 메소드를 사용하여 키가 존재하는지 여부를 결정하는 것이 좋습니다. 3. 키 () 메소드를 사용할 수 있지만 키를 확인하기 위해 기본값에서는 중복됩니다. 4. 값을 가져와야하고 예상 키가 일반적으로 존재하면 Try-excrect를 사용하여 KeyError 예외를 포착 할 수 있습니다. 가장 권장되는 방법은 안전하고 효율적이며 None 값의 영향을받지 않는 IN 키워드를 사용하는 것입니다. 이는 대부분의 시나리오에 적합합니다.

Fmt.scanf를 사용하여 간단한 구조화 된 데이터에 적합한 형식 입력을 읽지 만 공간을 만날 때 문자열이 잘립니다. 2. Bufio.scanner를 사용하여 라인별로 읽고, 멀티 라인 입력, EOF 감지 및 파이프 라인 입력을 지원하며, 스캔 오류를 처리 할 수 있습니다. 3. IO.readall (OS.Stdin)을 사용하여 큰 블록 데이터 또는 파일 스트림을 처리하는 데 적합한 모든 입력을 한 번에 읽습니다. 4. 실시간 키 응답에는 golang.org/x/term과 같은 타사 라이브러리가 필요하며 Bufio는 기존 시나리오에 충분합니다. 실용적인 제안 : 대화식 간단한 입력을 위해 FMT.Scan을 사용하고, 라인 입력 또는 파이프 라인에 Bufio.scanner를 사용하고, 큰 블록 데이터에 io.readall을 사용하고 항상 처리하십시오.

게으른로드는 연관성에 액세스 할 때만 쿼리 만 쉽게 N 1 문제로 이어질 수 있으며, 이는 관련 데이터가 필요한지 여부를 결정하지 않는 시나리오에 적합합니다. 2. 비상로드는 ()와 함께 사용하여 관련 데이터를 미리로드하여 N 1 쿼리를 피하기 위해 배치 처리 시나리오에 적합합니다. 3. 응급 로딩을 사용하여 성능을 최적화하고 Laraveldebugbar와 같은 도구를 통해 N 1 문제를 감지 할 수 있으며 모델의 속성이있는 $는 불필요한 성능 오버 헤드를 피하는 데 신중하게 사용됩니다.

Python의 메모리 관리는 참조 계산 및 쓰레기 수집 메커니즘을 기반으로합니다. 1. 기준 계수 메커니즘은 참조 번호가 0 일 때 객체가 즉시 릴리스되도록합니다. sys.getRefcount ()의 반환 값은 참조 자체를 증가시키기 때문에 실제 참조보다 1이 더 높습니다. 2. 기준 계수를 통해 원형 참조를 청소할 수 없으며 GC 모듈의 세대 재활용에 따라 다릅니다. gc.collect () 호출은 도달 할 수없는 객체를 재활용 할 수 있습니다. 3. 실제 개발에서 큰 대상 참조의 장기 보유는 피해야합니다. 우리는 약점 약한 참조를 사용하고, 메모리를 해제하기 위해 적시에 배치 할 수 있으며, Tracemalloc을 사용하여 메모리 할당을 모니터링 할 수 있습니다. 4. 요약 : Python은 참조 계산 및 쓰레기 수집을 결합하여 메모리를 관리하고 개발자는 도구를 사용하고 참조 파이프를 최적화 할 수 있습니다.

SQL은 Basic Like 및 Ilike 연산자, 전체 텍스트 검색 (Full-Textsearch) 및 정규식 (Regex)을 포함한 다양한 텍스트 검색 기능을 제공합니다. 1. Like와 Ilike는 기본 퍼지 매칭에 사용되며 와일드 카드 문자를 지원하며 키워드가 포함 된 접두사 또는 쿼리에 적합합니다. 2. 전체 텍스트 검색은 기사 나 로그와 같은 대규모 텍스트 내용을 처리하는 데 적합합니다. 자연 언어 또는 부울 패턴 검색에 적합한 효율성을 향상시키기 위해서는 전체 텍스트 인덱스가 필요합니다. 3. 정규 표현식은 로그 분석, 형식 검증 및 특정 구조에서 데이터 추출에 적합한보다 유연한 패턴 매칭 기능을 제공합니다. 다른 데이터베이스 시스템은 이러한 기능에 대한 지원 수준이 다르며 올바른 도구를 선택하면 쿼리 성능과 정확도를 향상시킬 수 있습니다.

원자 카운터는 레이스 조건을 피하기 위해 여러 고루틴에서 값을 안전하게 늘리거나 감소 시키거나 읽는 데 사용됩니다. GO의 Sync/Atomic 패키지는 기본 원자 작동을 제공합니다. Atomic.int64 (go1.19) 또는 atomic.addint64/loadint64와 같은 함수를 사용하는 것이 좋습니다. 1. Atomic.int64를 사용하여 각각 100 번의 고어 라틴과 같은 동시 자체 증가를 안전하게 달성하면 최종 결과는 1000입니다. 2. 이전 버전의 GO에서는 Atomic.addint64 (& Counter, 1) 및 Atomic.loadInt64 (& Counter) 작업을 사용할 수 있습니다.

반응 형 내비게이션 바는 순수한 CSS를 통해 구현되며, 대답은 숨겨진 확인란과 미디어 쿼리를 사용하여 모바일 측면에서 메뉴의 디스플레이 동작을 제어하는 것입니다. 1. 데스크탑 측면은 Flex 레이아웃을 통해 구현되는 수평 내비게이션 메뉴로 표시됩니다. 2. 모바일 쪽이 768px 미만인 경우 메뉴를 숨기고 햄버거 아이콘을 표시하고 레이블을 통해 숨겨진 확인란을 트리거하십시오. 3. 확인 된 상태 및 ~ 선택기를 사용하여 .nav-menu의 디스플레이 및 숨겨지는 것을 제어하십시오. 4. 햄버거 아이콘을 클릭 한 후 CSS 변환을 통해 애니메이션 효과를 달성 할 수 있습니다. 5. 메뉴는 절대 포지셔닝을 사용하여 올바른 레벨에서 표시를 보장합니다. 전체 솔루션에는 JavaScript가 필요하지 않으며 CSS에 의존하는 대화식 로직은 완전하고 가볍고 정적 웹 사이트에 적합합니다.

InnerHTML은 HTML 태그를 포함하는 컨텐츠를 설정하거나 얻는 데 사용되며 태그를 구문 분석합니다. 2. TextContent는 일반 텍스트를 처리하며 HTML을 구문 분석하지 않습니다. 3. TextContent는 보안 측면에서 XSS 공격을 방지 할 수 있지만 InnerHTML은 위험에 처해 있습니다. 4. TextContent는 성능이 빠르고 효율적입니다. 5. HTML이 필요하지 않은 경우 TextContent를 사용하는 것이 좋습니다. 필요한 경우 InnerHTML의 컨텐츠 필터링; 6. TextContent는 IE8 이하에서 양립 할 수 없으며 내 텍스트로 대체 될 수 있지만 두 동작은 다릅니다. 마지막 결론 : 보안 및 성능의 경우 TextContent가 선호되며 TextContent를 사용해야합니다.
