非境界ワイルドカード型 (unbounded wildcard type)

outline

ジェネリックスの型パラメータを汎用化する

  • ジェネリックスの型を使用したいが、実際の型パラメータが
    • 何であるかわからない
    • 何であるか気にしない

この時、型パラメーターに ? を用いる

ex

jp.ymatsukawa
  |
  + -- ubwildtype
  |       |
  |       + -- MyUtil.java
  + -- Main.java

jp.ymatsukawa/Main.java

package jp.ymatsukawa;

import jp.ymatsukawa.ubwildtype.MyUtil;

import java.util.HashSet;
import java.util.Set;

public class Main {
  public static void main(String[] args) {
    Set<String> s1 = new HashSet<>();
    Set<String> s2 = new HashSet<>();

    s1.add("A"); s1.add("B"); s1.add("C");
    s2.add("X"); s2.add("A"); s2.add("Z");

    System.out.println(MyUtil.numOfCommonElement(s1, s2));
  }
}

System out

1

jp.ymatsukawa/ubwildtype/MyUtil.java

package jp.ymatsukawa.ubwildtype;

import java.util.Set;

public class MyUtil {
  private MyUtil() {}

  public static int numOfCommonElement(Set<?> set1, Set<?> set2) {
    int num = 0;
    for(Object o : set2) {
      if(set1.contains(o)) {
        ++num;
      }
    }

    return num;
  }
}