開発メモ

開発用のメモです。

総称型の取得

pom.xml

レポジトリの追加

<repositories>
    <repository>
        <id>org.seasar.maven</id>
        <url>http://maven.seasar.org/maven2/</url>
    </repository>
</repositories>

ライブラリの追加

<dependencies>
    <dependency>
        <groupId>org.seasar.util</groupId>
        <artifactId>s2util</artifactId>
        <version>0.0.1</version>
    </dependency>
</dependencies>

ソースコード

package jp.mirageworld.algorithm.generic;

import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.util.Map;

import org.seasar.util.lang.GenericsUtil;

public class GenericSuperClass<E> {

    protected Class<E> clazz;

    public GenericSuperClass() {
        Class<E> entityClass = null;
        Map<TypeVariable<?>, Type> map;
        map = GenericsUtil.getTypeVariableMap(getClass());
        for (Class<?> c = getClass(); c != Object.class; c = c.getSuperclass()) {
            if (c.getSuperclass() == GenericSuperClass.class) {
                Type type = c.getGenericSuperclass();
                Type[] arrays = GenericsUtil.getGenericParameters(type);
                entityClass = (Class<E>) GenericsUtil.getActualClass(arrays[0], map);
                break;
            }
        }
        this.clazz = entityClass;
    }
}
Twitter: @asahina_alice