2

Spring 3 webapp には、次のような DAO があります。

public class BaseDAOImpl<T extends AbstractEntity> implements BaseDAO<T> {
   ...

    public void doSomething(Class<T> clazz) {
        log.debug("class name: " + clazz.getName());
        ...
    }

   ...
}

そのログには、探しているものが出力されます。たとえば、com.xyz.Customerとしましょう。

ただし、上記のログ行は説明用です。アプリでは、ロギングを処理するためにアスペクトを使用しています。そしてその側面で、私は議論を記録しています。したがって、私の@Beforeアドバイスでは、次のようなコードがあります。

...
Object[] args = joinPoint.getArgs();
for (Object o : args) {
    ...
    log.debug("class name: " + o.getClass().getName());
    ...

そしてそれがclazzBaseDAOImlpで実行されると、 java.lang.ClassdoSomething()としてログに記録されます。

したがって、ジェネリックが型消去によって実装されていることを理解しながら、なぜcom.xyz.CustomergetName()呼び出しでcom.xyz.Customer が表示されるのか理解できませんdoSomething()が、アスペクトではjava.lang.Classです。

4

2 に答える 2