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());
...
そしてそれがclazz
BaseDAOImlpで実行されると、 java.lang.ClassdoSomething()
としてログに記録されます。
したがって、ジェネリックが型消去によって実装されていることを理解しながら、なぜcom.xyz.CustomerのgetName()
呼び出しでcom.xyz.Customer が表示されるのか理解できませんdoSomething()
が、アスペクトではjava.lang.Classです。