序文
Java 8がJava 5以来のJavaの最も重要なバージョンであることは間違いありません(2004年にリリース)。このバージョンには、言語、コンパイラ、ライブラリ、ツール、JVMに12を超える新機能が含まれています。
Java 8はJavaのメジャーバージョンです。一部の人々は、これらの新機能はJava開発者によって期待されているが、学ぶために多くの努力が必要であると信じている人もいます。この記事の下には、Java 8のオプション、デフォルトのメソッド、静的メソッドの詳細を紹介します。これ以上ADOなしで、詳細な紹介を見てみましょう。
オプション
オプションのクラス( java.util.Optional )は、値が存在するか存在しないかを表すコンテナクラスです。以前は、値が存在しないことを示すためにnullを使用していました。現在、オプションはこの概念をよりよく表現できます。また、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){optional <user> user = optional.ofnullable(u); if(!user.ispresent())は「不明」を返します。 return user.get()。name;}この書き換えは簡潔ではなく、操作は最初のコードと同じです。 ispresentメソッドを使用してu == nullを置き換えることにすぎません。このような書き換えは、オプションの正しい使用法ではありません。もう一度書き直しましょう。
public static string getname(user u){return optional.ofnullable(u).map(user-> user.name).orelse( "nown");}これは、オプションを使用する正しい方法です。この考えによれば、レイヤーごとに判断を下すのではなく、安心してチェーンコールをすることができます。コードを見てください:
public static string getChampionName(競争comp)スローILLEGALARGUMENTEXCEPTION {if(comp!= null){compresult result = comp.getResult(); if(result!= null){user champion = result.getChampion(); if(champion!= null){return champion.getName(); }}}新しいIllegalargumentException( "PARAM COMPの値は使用できません。");}さまざまな理由(競争はまだチャンピオンシップ、メソッドへの異常な呼びかけ、特定の方法の実装に埋もれた大規模なギフトパッケージなどcomp.getResult().getChampion().getName() 。 Kotlinなどの他の言語は、構文レベルでオペレーターの祝福を提供します: comp?.getResult()?.getChampion()?.getName()
オプションのサポートの後、これらのコードがどのように見えるか見てみましょう。
public static string getChampionName(競争comp)スローILLEGALARGUMENTEXCEPTION {return optional.ofnullable(comp).map(c-> c.getresult()).map(r-> r.getchampion()).map(u-> u.getname()).orelsethrow().orelsethection() - new legalgumentexception(これはとても快適です。オプションの魅力はそれ以上です。オプションには、パラメーターの合法性をテストするために使用できるオプションなど、いくつかの魔法の用途もあります。
public void setName(string name)throws IllegalargumentException {this.name = optional.ofnullable(name).filter(user :: isnamevalid).orelsethrow((() - > new IllegalargumentException( "Invalid username。");};}上記のコードは、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 extends testf実装testInterface {public static void main(string [] args){test t = new test(); T.getName(); //出力はtestf}}}実装クラスが2つのインターフェイスを実装する場合、1つの親インターフェイスがデフォルトのメソッドを提供し、他の親インターフェイスが同じ名前とパラメーターリストを持つメソッドを提供する場合(メソッドがデフォルトメソッドであるかどうかに関係なく)、競合を解決するためにメソッドをオーバーライドする必要があります。
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へのご支援ありがとうございます。