머리말
Java 8이 Java 5 (2004 년에 출시) 이후 Java의 가장 중요한 버전이라는 것은 의심의 여지가 없습니다. 이 버전에는 언어, 컴파일러, 라이브러리, 도구 및 JVM의 12 가지가 넘는 새로운 기능이 포함되어 있습니다.
Java 8은 Java의 주요 버전입니다. 어떤 사람들은 Java 개발자가 이러한 새로운 기능을 기대하지만 학습하려면 많은 노력이 필요하다고 생각합니다. 아래 에서이 기사에서는 Java 8의 새로운 기능, 기본 메소드 및 정적 메소드의 세부 정보를 소개합니다. 더 이상 고민하지 않으면 자세한 소개를 살펴 보겠습니다.
선택 과목
선택적 클래스 ( java.util.Optional )는 값이 존재하는지 또는 존재하지 않는지를 나타내는 컨테이너 클래스입니다. 값이 존재하지 않음을 나타 내기 위해 NULL을 사용하는 데 사용되었습니다. 이제 선택 사항은이 개념을 더 잘 표현할 수 있습니다. 그리고 널 포인터 예외를 피할 수 있습니다.
일반적인 방법 :
Optional.of(T t) : 옵션 인스턴스를 만듭니다.Optional.empty() : 빈 옵션 인스턴스를 만듭니다.Optional.ofNullable(T t) t가 null이 아닌 경우 선택적 인스턴스를 생성하고 그렇지 않으면 빈 인스턴스를 만듭니다.isPresent() : 값이 포함되어 있는지 확인합니다.orElse(T t) : 호출 객체에 값이 포함 된 경우 값을 반환하고 그렇지 않으면 t를 반환합니다.orElseGet(Supplier s) : 호출 객체에 값이 포함 된 경우 값을 반환하고 그렇지 않으면 s로 얻은 값을 반환합니다.map(Function f) 처리 할 값이 있고 처리 된 옵션을 반환하는 경우 Optional.empty() 반환합니다.flatMap(Function mapper) 은 MAP와 유사하므로 반환 값이 선택 사항이어야합니다.다음은 옵션을 올바르게 사용하는 방법을 알려주는 importnew의 단락입니다. 예를 들어, 다음과 같이 쓰지 마십시오.
public static string getName (user u) {옵션 <user> user = 옵션 .ofNullable (u); if (! user.ispresent ()) reture "Unknown"; return user.get (). name;}이 재 작성은 간결 할뿐만 아니라 작업은 첫 번째 코드와 동일합니다. u == null을 대체하기 위해 ispresent 방법을 사용하는 것 이상입니다. 이러한 재 작성은 옵션의 올바른 사용법이 아닙니다. 다시 다시 작성해 봅시다.
public static string getName (user u) {return optional.ofnullable (u) .map (user-> user.name) .orelse ( "Unknown");}이것은 선택 사항을 사용하는 올바른 방법입니다. 그런 다음이 아이디어에 따르면, 우리는 층별로 판단을하는 대신 마음의 평화로 체인 호출을 할 수 있습니다. 코드를보십시오.
public static string getChampionName (Competition Comp) 불법 행위 {if (comp! = null) {compresult result = comp.getResult (); if (result! = null) {사용자 챔피언 = result.getchampion (); if (챔피언! = null) {return Champion.getName (); }}} 새로운 불법 불법 행정 exception 던지기 ( "Param Comp의 값을 사용할 수 없습니다.");}. 다양한 이유 (예 : 경쟁은 아직 챔피언십, 비정상적인 방법, 특정 방법에 대한 비정상적인 선물 패키지, 특정 메소드의 구현에 묻힌 대형 선물 패키지 등을 제작하지 않았으므로 comp.getResult().getChampion().getName() 기뻐할 수는 없습니다. Kotlin과 같은 다른 언어는 구문 수준에서 운영자의 축복을 제공합니다 : comp?.getResult()?.getChampion()?.getName() ?
선택적 지원 후에이 코드가 어떻게 보일지 보자.
public static string getchampionName (Competition Comp)은 불법 행위를 던졌습니다. {return optional.ofNullable (comp) .map (c-> c.getresult ()) .map (r-> r.getchampion ()).이것은 매우 편안합니다. 선택 사항의 매력은 그 이상입니다. 선택 사항에는 매개 변수의 적법성을 테스트하는 데 사용할 수있는 옵션과 같은 마법의 용도도 있습니다.
public void setName (String Name)은 불법 행위를 던진다.
위의 코드 참조는 importNew -Java8 옵션을 올바르게 사용하는 방법을 참조합니다.
인터페이스의 기본 및 정적 메소드
정적 메소드를 Java8 인터페이스에 추가하거나 기본 메소드를 추가 할 수 있으며 기본 메소드가 기본값으로 수정됩니다.
public interface fun <t> {default void getName () {System.out.println ( "Hello World"); } static void getage () {System.out.println ( "Nine"); }}인터페이스가 기본 메소드를 정의하는 경우 구현 클래스의 상위 클래스는 동일한 이름 및 매개 변수 목록의 메소드를 정의합니다. 그런 다음 구현 클래스가 호출되면 상위 클래스의 메소드가 실행됩니다.
public class testf {public void getName () {system.out.println ( "testf"); }} public interface testinterface {default void getName () {System.out.println ( "Hello World"); }} public class test 확장 testf emplements rements testinterface {public static void main (String [] args) {test t = new test (); t.getName (); // 출력은 testf}}}구현 클래스가 두 인터페이스를 구현하는 경우, 한 부모 인터페이스가 기본 메소드를 제공하고 다른 상위 인터페이스가 동일한 이름과 매개 변수 목록이있는 메소드를 제공하는 경우 (메소드가 기본 메소드인지 여부에 관계없이)는 충돌을 해결하기 위해 메소드를 재정의해야합니다. 그렇지 않으면 오류가보고됩니다.
public interface testinterface {default void getName () {System.err.println ( "Hello World"); }} public interface testinterface1 {void getName ();} public class test1은 testInterface, testInterface1 {public void getName () {system.out.println ( "tes1f"); }}요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.