2012-09-06 25 views
5

Según entiendo que .. es 0-Many args y * es un arg de any nombre. ¿Es esto correcto?Qué significan ... y * en aspectj

¿Tiene la sintaxis de soporte aspectj como args(..,myArg,..)?

+0

var-arg solo puede ser el último argumento (al final) en Java. – Shark

+0

Sería muy difícil/imposible para el compilador/intérprete saber qué argumento pasó realmente 'myArg' en su caso. – climbage

Respuesta

7

Esto es de AspectJ sitio: http://www.eclipse.org/aspectj/doc/next/progguide/semantics-pointcuts.html

* representa cualquier número de caracteres, excepto ""

.. representa cualquier número de caracteres, incluyendo cualquier número de "."

actualización De AspectJ en acción - para firmas de método:

En firmas de método, el comodín .. se utiliza para denotar cualquier tipo y número de argumentos tomados por un método

* especifica un único argumento

+0

pero también esto: "Si es el comodín" * ", entonces cualquier argumento coincidirá, y si es el comodín especial" .. ", entonces cualquier número de argumentos coincidirá con" – MikePatel

+0

Sí, tienes razón, tengo actualizado la respuesta en consecuencia para las firmas de método también. AspectJ no es compatible con '(.., myarg, ..)', aunque no estoy seguro de por qué. –

4

Otros han respondido a una parte de la pregunta que tengo ante mí, por lo que solo modificaré:

.., bla, .. no funciona porque si enlaza el parámetro bla a una variable, puede haber varias combinaciones coincidentes en caso de que se produzca un tipo coincidente varias veces en la lista de parámetros. Ejemplo:

void foo(int a, String b, String c, File d)

Ahora lo que debería ocurrir si el consejo es:

before(String bla) : call(void foo(.., bla, ..)) && args(bla)

caso bla quedar vinculados al valor de Stringb o c?

Cuestiones relacionadas