ホームページ  >  記事  >  Java  >  ワイルドカードを使用して Java の一般的なパフォーマンスを向上させる方法

ワイルドカードを使用して Java の一般的なパフォーマンスを向上させる方法

王林
王林転載
2023-04-23 08:04:20940ブラウズ

    ワイルドカードを使用してジェネリックを強化する

    1. 質問

    ジェネリックは JAVA の重要な機能です。ジェネリック プログラミングを使用すると、コードを作成できます。再利用率が向上します。

    実装: ジェネリック メソッドでワイルドカードを使用する

    2. 問題解決のアイデア

    クラス WildcardsTest を作成します。

    指定されたリストの中央の値を取得するメソッド getMiddle() を作成します。

    ジェネリックでは、ワイルドカード文字として「?」を使用します。ワイルドカード文字の使用は、通常の型パラメータの使用と似ています。たとえば、ワイルドカード文字は、extends キーワードを使用して値の上限を設定できます。 。たとえば、

    extends Number>

    は、Byte、Double、Float、Integer がこの型パラメーターに適していることを示します。

    また、

    super Number>

    w など、上限と下限があります。これは、型パラメータが指定されていることを意味します。 Number クラス Class (Object.

    3 など) の親です。詳細なコードの説明

    #
    package com.xiaoxuzhu;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    /**
     * Description:
     *
     * @author xiaoxuzhu
     * @version 1.0
     *
     * <pre class="brush:php;toolbar:false">
     * 修改记录:
     * 修改后版本	        修改人		修改日期			修改内容
     * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
     * 
     * @date 2022/5/10  */ public class WildcardsTest {     public static Object getMiddle(List extends Number> list) {         return list.get(list.size() / 2);     }     public static void main(String[] args) {         List ints = new ArrayList();         ints.add(1);         ints.add(2);         ints.add(3);         System.out.print("整型列表的元素:");         System.out.println(Arrays.toString(ints.toArray()));         System.out.println("整型列表的中间数:" + getMiddle(ints));         List doubles = new ArrayList();         doubles.add(1.1);         doubles.add(2.2);         doubles.add(3.3);         System.out.print("浮点列表的元素:");         System.out.println(Arrays.toString(doubles.toArray()));         System.out.println("浮点列表的中间数:" + getMiddle(doubles));     } }

    ワイルドカードを使用して Java の一般的なパフォーマンスを向上させる方法

    #補足知識ポイント

    Generics

    などを使用してジェネリックを宣言できます。 の宣言メソッドは T のスコープを制限し、T は User のサブクラスのみにすることができます。

    1. パラメーターの型は、クラス (ジェネリック クラス) の作成に使用されます。

    2. パラメーター タイプは、インターフェイス (汎用インターフェイス) の作成に使用されます。

    3. パラメーター タイプは、メソッド (ジェネリック メソッド) の作成に使用されます。ジェネリック の宣言位置 (メソッドの修飾子の後、戻り値の型の前) に注意してください。

    ? ワイルドカード文字を入力してください

    いくつかの形式のワイルドカード文字:

    1. 無制限のワイルドカード文字、>。

    2. 上限ワイルドカード、 拡張ユーザー>。パラメーターの型が User のサブクラスのみであることを示します。

    3. 下限ワイルドカード、 super User>。パラメーターの型が User の親クラスのみであることを示します。

    public class P<T> {
      private T t;
      public T getT(){
        return t;
      }
    
      //通配符
      //设置指定类型的范围,超过范围就会报错
      //extends : 指定范围必须是其(这里是List)子类
      public void set(P<? extends List> list){
        return;
      }
    
      //super : 指定类型必须是其(这里是List)父类
      public void setSuper(P<? super List> list){
        return;
      }
    
      public static void main(String[] args) {
        new P<String>(); //T会被替换成String
        new P<Integer>(); //T会被替换成Integer
        Person<String,List,Double,User> person = new Person<String,List,Double,User>();//T会被替换成String,B会被替换成List...
        person.eat("鱼");
      }
    }
    class User<T extends P>{//这里给类的泛型指定范围,T必须要继承类P。
    
    }
    //一个类可以同时指定多个泛型
    class Person<T,B,S,N>{
      private T t;
      private B b;
      private S s;
      private N n;
      public void eat(T t){
        this.t = t;
        System.out.println("我正在吃"+this.t);
      }
    }

    ジェネリックスの宣言は、クラス、インターフェイス、およびメソッドの作成に不明なデータ型が使用されることを示します。整数型または文字列型を使用できます。そのタイプを T、S、N などとして定義するだけです。

    インスタンス化するときは、T が何であるかを宣言する必要があります。

    ジェネリック オブジェクトの使用方法を定義する場合、T の型はまだわかりませんが、String 型または Integer 型である可能性があります。 T が特定の汎用データ型として定義されている場合、パラメーターはこのデータ型のみにすることができます。現時点では、特定の汎用データ型の代わりにワイルドカードが使用されます。

    ジェネリックとワイルドカードを使用して、コードの再利用性を向上させます。

    オブジェクトが宣言と使用の 2 つの部分に分かれている場合。ジェネリックは型宣言におけるコードの再利用に重点を置いているのに対し、ワイルドカードは使用時のコードの再利用に重点を置いています。ジェネリックは内部データ型に関する不確実性を定義するために使用され、ワイルドカードは使用されるオブジェクトのタイプに関する不確実性を定義するために使用されます。

    以上がワイルドカードを使用して Java の一般的なパフォーマンスを向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。