検索
ホームページJava&#&チュートリアルJava のジェネリックスを一緒に理解しましょう

この記事では、java に関する関連知識を提供し、主にカスタム ジェネリック クラス、カスタム ジェネリック メソッド、カスタム ジェネリック インターフェイスやその他の内容を含むジェネリックスに関連する問題を紹介します。みんなの役に立つでしょう。

Java のジェネリックスを一緒に理解しましょう

推奨される学習: 「java ビデオ チュートリアル

  • ジェネリック: は JDK5 にあります導入された機能は、演算のデータ型を制限し、コンパイル段階でそれらをチェックできます。
  • ジェネリックの形式: 、注: ジェネリックは 参照データ型 のみをサポートします。
  • コレクション システムのすべてのインターフェイスと実装クラスは、ジェネリックスの使用をサポートしています。

利点:

  • 統一されたデータ型。
  • 型はコンパイル段階で決定できるため、強制的な型変換で発生する可能性のある問題を回避するには、実行問題をコンパイル期間まで進めます。
public static void main(String[] args) {
        List<string> list = new ArrayList();
        list.add("石原里美");
        list.add("工藤静香");
        list.add("朱茵");
        for (String s : list) {
            System.out.println(s);
        }
    }
输出结果:
石原里美
工藤静香
朱茵</string>

また、ジェネリックスは、クラスの後のジェネリック クラス、メソッド宣言の後のジェネリック メソッド、インターフェイスの後のジェネリック インターフェイスなど、さまざまな場所で定義できます。次に、これらのジェネリックを一緒に使用する方法を学びましょう:

カスタム ジェネリック クラス

Concept

  • 定義クラス ジェネリックを定義するクラス。 Same time はジェネリック クラスです。
  • ジェネリック クラスの形式: 修飾子クラス クラス名 { }
public class MyArrayList<e>{    }</e>
  • 関数: コンパイル段階で使用可能コレクションの役割に似たデータ型です。

実践的な教育

次に、基本的な追加および削除操作を実装するジェネリック クラスを作成し、その使用法について詳しく学習します。

//泛型类MyArrayLIst
public class MyArrayLIst<e> {
    public void add(E e){

    }
    public void remove(E e){

    }
}
//main
public static void main(String[] args) {
        MyArrayLIst<string> list = new MyArrayLIst();
        //通过对泛型的设定,实现对数据专一处理
        list.add("石原里美");
        list.add("工藤静香");
        list.remove("工藤静香");
    }</string></e>

ジェネリック クラスの原則:

出現するジェネリック変数をすべて、送信される実際のデータ型に置き換えます。

注意深く観察すると、ジェネリック クラスと通常のクラスの最大の違いは、メソッド呼び出し時に同じデータを均一に処理でき、他のデータ型が関与しないことであることがわかります。強制的な型変換中に発生する可能性のある問題はある程度回避されます。

カスタム ジェネリック メソッド

概念

  • メソッドの定義中にジェネリック メソッドを定義するメソッドは、ジェネリック メソッドです。
  • ジェネリックメソッドの形式: 修飾子 戻り値の型 メソッド名 (仮引数リスト) { }
public <e> void view(E e){    }</e>
    #関数:ジェネリックスをメソッドで使用すると、実際のすべての型のパラメーターを受け取ることができるため、メソッドの汎用性が高まります。
  • 注: ジェネリック メソッドは、ジェネリック クラスで定義されたメソッドとは区別する必要があります。ジェネリック メソッドもジェネリックを使用していますが、ジェネリックはジェネリックによって定義されるのではなく、ジェネリックによって定義されます。クラス定義。
実践教育

どのような型の配列を渡してもその内容を返すことができる、つまり Arrays.toString() の機能が実現されます

public static void main(String[] args) {
        String [] name = {"石原里美","工藤静香","朱茵"};
        view(name);
        Integer [] age = {18,19,20};
        view(age);
    }
    public static  <t> void view(T[] arr){
        StringBuilder list = new StringBuilder();
        for (int i = 0; i   合格 ジェネリックメソッドの定義を実装すると、複数のデータ型の受信が実現でき、応用範囲が広がります。 <p></p>カスタム ジェネリック インターフェイス <h2></h2>コンセプト <h2></h2>
<ul>ジェネリックを使用して定義されたインターフェイスは、ジェネリック インターフェイスです。 <li>#汎用インターフェイスの形式: パブリック インターフェイス People<e>{ }<li><span style="background-color:#ed7976;"><pre class="brush:php;toolbar:false">public interface People <e>{    }</e>
機能: 汎用インターフェイスにより、実装クラスは現在の関数が操作する必要があるデータ型
  • 実践的な教育
Teacher クラス、Student クラスなどで操作を実装するための People インターフェイスを定義します。

//People接口
public interface People <e>{
    void run(E e);
    void height(E e);
}
//Student类
public class Teacher {

}
//实现类Fantype
public class Fantype implements People<teacher> {

    @Override
    public void run(Teacher teacher) {

    }

    @Override
    public void height(Teacher teacher) {

    }
}</teacher></e>

Through上記のコードを観察すると、People の後にどのような型が定義されているかがわかります。実装クラスはこのデータ型に対してのみ操作でき、他の型はこの操作を実行できません。

通配符和上下限 

通配符 

  • ?可以在“使用泛型”的时候代表一切类型
  • E T K V是在定义泛型的时候用的 

 假设现在有一场为学生和老师而举办的比赛,需要比较速度究竟谁更快,分别创建一定数量的对象并将其传入集合之中。然而当我们将这两个集合分别传入方法中的时候,会发现,学生对象集合list2出现报错,为什么呢?原因是因为数据类型不同,那么该如何使得两种类型都可以传入呢?或许这个时候就会有人说了:“既然两个类都是People的子类,那么为什么不定义它的泛型是People呢?”这个想法很好,但是我们需要明确一点的是子类与父类虽然是有关系的,但是定义之后的集合是没有关系的,所以这里是行不通的。

//main
//老师对象集合
ArrayList<teacher> list1 = new ArrayList();
list1.add(new Teacher());
list1.add(new Teacher());
pk(list1);
//学生对象集合
ArrayList<student> list2 = new ArrayList();
list2.add(new student());
list2.add(new student());
pk(list2);//由于pk方法的形参是泛型为Teacher的集合,所以会报错
//父类
class People{

    }
//子类
class Teacher extends People{

    }
class student extends People{

    }
//pk方法:
public static void pk(ArrayList<teacher> people){
}</teacher></student></teacher>

应对这个问题,我们可以便可以将本篇文章引入的知识“通配符”放在实际应用中解决问题了,通过其简短的概念“?可以在‘使用泛型’的时候代表一切类型”就可以理解其作用了,这里我们可以使用“?”共同代表两种类型。

public static void pk(ArrayList> people){
//通过通配符?便可以将这个问题解决掉
    }

 上下限 

然而此时又出现一个问题,定义了一个dog类,试图创建一些对象并传入集合中混入比赛,这种当然情况当然是不允许发生的,然而?是可以表示任意类型的,并不能对其进行限制。因此上下限的作用就体现出来了:

  •  上限: extends 父类>,传入类型必须是该父类或者是父类的子类
  • 下限: super 子类>,传入类型必须是该子类或者是子类的父类
public static void pk(ArrayList extends People> people){
//通过上下限便可以将这个问题解决掉
//要求传入的类型必须是People的子类才可以
    }

推荐学习:《java视频教程

以上がJava のジェネリックスを一緒に理解しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

java中封装是什么java中封装是什么May 16, 2019 pm 06:08 PM

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

归纳整理JAVA装饰器模式(实例详解)归纳整理JAVA装饰器模式(实例详解)May 05, 2022 pm 06:48 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于设计模式的相关问题,主要将装饰器模式的相关内容,指在不改变现有对象结构的情况下,动态地给该对象增加一些职责的模式,希望对大家有帮助。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン