Моя цель - «обойти» все методы equals
подклассов типа. Итак, я написал следующий аспект.AspectJ непревзойденный тип предупреждения: как интерпретировать?
Я использую плагин aspectj-maven, и я говорю ему, чтобы сплести код в файле jar зависимости, так как это все методы equals.
Я вознагражден:
Warning:(22, 0) ajc: does not match because declaring type is java.lang.Object, if match desired use target(com.basistech.rosette.dm.BaseAttribute+) [Xlint:unmatchedSuperTypeInCall]
Warning:(22, 0) ajc: advice defined in com.basistech.rosette.dm.AdmEquals has not been applied [Xlint:adviceDidNotMatch]
Я озадачен. Множество типов в иерархии BaseAttribute
объявляет equals
, поэтому не следует смотреть Object
. Добавление &&target(BaseAttribute+)
, похоже, не устраняет эту ошибку.
Что мне не хватает, и/или как я могу отслеживать это?
package com.basistech.rosette.dm;
/**
* See if we can't make an aspect to spy on equals ...
*/
public aspect AdmEquals {
// we would like to narrow this to subclasses ...
boolean around(Object other): call(public boolean BaseAttribute+.equals(java.lang.Object)) && args(other) {
boolean result = proceed(other);
if (!result) {
System.out.println(this);
System.out.println(other);
System.out.println(result);
}
return true;
}
}
Нет, это не решение. Я напишу еще один ответ и объясню, почему и что делать. – kriegaex
К сожалению, я плохо, я не прокрутил по горизонтали, чтобы увидеть «target()' часть pointcut. Я только что переформатировал код с разрывами строк, чтобы сделать важную часть видимой. – kriegaex
В качестве альтернативы вам может потребоваться использовать выполнение вместо вызова pointcut. Он также сплет меньше места в коде, который часто бывает благоприятным: 'execute (public boolean BaseAttribute + .equals (Object))' Таким образом, вам также не нужно ограничение 'target()'. – kriegaex