以下のエディターは、Java の Object、T (ジェネリック)、および ? の違いについて説明する記事を提供します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。編集者をフォローして見てみましょう
最近ジェネリックを再読していくつかの考察を読んだので、Object、T (以下ジェネリックと呼びます)、および ? について疑問を感じています。
まず オブジェクト クラス について理解しましょう。Java を勉強している人なら誰でも、オブジェクトがすべてのクラスの親クラスであることを知っているはずです 注: これは、その範囲が非常に広いことを意味します。 まず最初に、パラメータのタイプがオブジェクトの場合、パラメータのタイプは非常に広範囲になることを覚えておいてください。
「Java で考える」では、ジェネリックの出現には多くの理由があり、最も目を引く理由の 1 つはコンテナ クラスの作成であると述べています。これをどのように理解すればよいでしょうか?私の理解では、コンテナ クラスを作成するためにこれを脇に置き、特定の型を制限するジェネリックの目的に戻ることができます。
それでは、Object と T の 2 つの重要な違いを要約することができます:
Object の範囲は非常に広く、T は最初からこの型を制限します (型を Object に制限できることを含む)。
Objectは、すべてのクラスの親クラスであるため、型変換を強制しますが、Tはコーディング時に最初から特定の型を制限しているため(コードを書くときに注意してください)、強制的に型変換する必要はありません。 (コードを記述するときに強調する必要がある理由は、ジェネリックスが仮想マシン内の JVM によって消去されるためです。その特定の型情報はジェネリックスから参照できますが、ここでは拡張しません)。
たとえば、jdk の List クラスはジェネリック クラスです。ここで、そのタイプが Object であることを指定します。
List<Object> list = new ArrayList<Object>(); int i = 0; String s = "s"; list.add(i); list.add(s);
List 自体はジェネリック クラスです。このとき、オブジェクト型のパラメーターを受け取るように指定します。ただし、取り出す場合は、特定の型にキャストする必要があります。
ここで、String型のパラメータを受け取るListを指定すると、このListはString型にのみ配置でき、取り出す際にキャスト型変換を行う必要がありません。
これが私たちにもたらすインスピレーションは、List のようなクラスを作成するときは、ジェネリックスを使用するかどうかに注意を払う必要があるということです。より一般的なクラスを作成し、より多くの議論を行い、より多くの理解を深めてください。そうしないと、クラスが依然として混同される可能性があります。
次に、? があります。これは、クラス型を取得するためにリフレクションを使用する必要がある場合に使用されます。その説明は、不確実な型を受け取ることです。これは、オブジェクトと少し同じです。私の理解では、「?」だけを使用する場合は Object と同じですが、「?」は Object よりも少し「高度な」使い方があり、つまり、不確実な範囲を狭めて次のようなものを使用できます。 "?" extendsTest" は、Test クラスを受け取る 継承された クラスのみが受け入れられることを意味します。スコープは Object のスコープより小さいですか?
上記はObject、T、?の違いです。さらに数行のコードを書き、さらに実験を行い、さらに議論すれば、いつ、どこで適切に使用すればよいかがわかります。
以上がオブジェクト、T (ジェネリック)、および Java におけるそれらの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。