タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

genericsに関するcactusmanのブックマーク (10)

  • Javaジェネリクス再入門 - プログラマーの脳みそ

    ジェネリクスでは、「型」を変数にした「型変数」というものを取り扱う。型変数で何が嬉しいかというと、メジャーな例ではコレクションAPIが挙げられる。java.util.Listとかjava.util.Mapとかのデータを格納するタイプのユーティリティクラスのことだ。 2004年にJavaのバージョンが5.0となるまでは、Javaにはジェネリクスの機能はなかった。なので、Listにデータを格納し、取得する場合は List list = new ArrayList(); list.add("hello!"); String str = (String) list.get(0); といったソースコードになる。 add()の引数はObject型で宣言されており、どんな参照型でもadd()することができた。 get()の戻り値もObject型で宣言されておりキャストが必要だった。このキャストはプログラ

    Javaジェネリクス再入門 - プログラマーの脳みそ
  • 再帰的ジェネリクスの代入互換性 - プログラマーの脳みそ

    Javaのややこしいジェネリクスの話をしよう。*1 再帰的ジェネリクス クラスHogeがあったとして、型変数Tを取る。 public class Hoge<T> {} このHogeの型変数Tがextends Hogeとすると public class Hoge<T extends Hoge> {} すると、T extends Hoge の Hoge が raw型だと警告される。Hogeの<>の部分にHoge型を継承した型を指定しなければならない。ここで型変数T が extends Hogeだったので、丁度いいからT型をおさめよう。 public class Hoge<T extends Hoge<T>> {} これは再帰的ジェネリクス(recursive generics)と呼ばれているようだ。 追記:僕は勝手に自己言及型ジェネリクスなどと呼んでいた。情報サンクス!併せてタイトルなども表現

    再帰的ジェネリクスの代入互換性 - プログラマーの脳みそ
  • 【Java】総称型で定義されたフィールドの型パラメータを取得する | スマートネットワーク 開発ブログ

    どうしても型パラメータを取得したい。 - いまいにっき class TestBean1 { } class TestBean2 { List<TestBean1> list1; } list1のクラス(List)の型パラメータとして与えられた型(TestBean1)の情報を取得したい。 気になったので調べてみました。 以下のような感じで取得できます。 package aaa; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import org.junit.Test; public class GetGenericsTest { @Test public void test() t

  • https://bugs.java.com/?bug_id=6302954

  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • ジェネリクス型変数と型階層 - プログラマーの脳みそ

    @masaru_b_cl とジェネリクスの話をしていて、継承の際に型変数に具体的な型をバインドして単純化したりするんだよ、みたいな話をしていたのだけど、コード例がないとイメージしにくいと思うのでちょっと書いておこう。 二つの型変数 I, O をもつinterfaceがあったとする。 public interface Executor<I, O> { O exec(I in); } この実装クラスとしてListを受け取って合計を返すSumIntegerクラスを考えよう。 public class SumInteger implements Executor<List<Integer>, Integer>{ public Integer exec(List<Integer> in) { int ret = 0; for (int value : in) { ret += value; } re

    ジェネリクス型変数と型階層 - プログラマーの脳みそ
  • genericsのboundというか、?の動作 - @katzchang.contexts

    genericsのboundってよーわからんとのことなので、調子に乗って説明しちゃうぞ! List<?>の動作 ↓のコードがコンパイルエラーになるのはなんで?なんでなの? private <T> void add(List<? extends T> list, T t){ list.add(t); } // ==> error // 型 List<capture#1-of ? extends T> のメソッド add(capture#1-of ? extends T) は 引数 (T) に適用できません。 genericsのboundってよーわからん - ハタさんのブログ 一言で説明するとList<?>にはaddできません。これはList<?>とかList<? extends Hoge>は不定なインスタンス*1を持つわけで、addできるかわからないからだと思われます。 例えば、以下のコード

    genericsのboundというか、?の動作 - @katzchang.contexts
  • 自己参照するジェネリックタイプの使い方 - うなの日記

    そんな名前かどうかは知りませんが、「>」みたいな自分で自分を使うジェネリックタイプの使い方。最初見たとき、これはないだろー、と思ったけど、ありみたいです。 どういう時に使うか 自分自身を返すAPIを持つようなクラスで 返す型をパラメータで指定したい場合 に使えます。(きっと他にいい例があるはず・・。こんなのしか思いつかない・・。) 例 次のようなクラス「Chain」を作りたい。 Chainは、任意のChainとつなぐことができる(ことを示す)インターフェイス。 setNext(), next()を持つ。 つなげるChainの型をパラメータタイプで指定できる。 パラメータで指定された型にマッチしないChainの実装とはつなげない。 パラメータでChain自体が指定された場合、すべてのChainの実装とつながるChainとなる。 next()はパラメータで指定された型のChainを返す。 これ

    自己参照するジェネリックタイプの使い方 - うなの日記
  • Scalaの総称クラスと総称メソッド-共変-

    いわゆるGenericsのメカニズムについては、ごく基的な部分についてはJavaと同じように見える。型パラメータの境界(親の型としてXXXを持ってないといけないとか、子の型としてXXXを持ってないといけないとか)についても同じ。大きく違うのは、型パラメータの継承関係と、パラメータバウンドされた総称クラス(以下、面倒なので"総称クラス"と書く)自体の継承関係との関係、すなわち共変(Co-Variant)に関する部分。 といっても、共変自体にあまり詳しくないので、しばらく共変について勉強してみる。 共変 調べても定義らしい定義が出てこなくて困った。とりあえずは関連ありそうな記事として以下のようなものがあった。 Javaの理論と実践: Generics、了解! Javaの理論と実践: Genericsのワイルドカードを使いこなす、第1回 Javaの理論と実践: Genericsのワイルドカード

  • 1