2012-09-06 32 views
5

Sự hiểu biết của tôi là ..0-Many args và * là một arg của tên any. Điều này có đúng không?Làm gì .. và * có nghĩa là ở khía cạnh

Cú pháp hỗ trợ aspectj như args(..,myArg,..)?

+0

var-arg chỉ có thể là đối số cuối cùng (ở cuối) trong Java. – Shark

+0

Nó sẽ rất khó/không thể cho trình biên dịch/thông dịch viên để biết đối số nào đã qua thực sự là 'myArg' trong trường hợp của bạn. – climbage

Trả lời

7

Đây là từ AspectJ trang web: http://www.eclipse.org/aspectj/doc/next/progguide/semantics-pointcuts.html

* đại diện cho bất kỳ số lượng nhân vật ngoại trừ ""

.. đại diện cho bất kỳ số lượng ký tự nào bao gồm bất kỳ số nào "."

Cập nhật Từ AspectJ trong Hành động - cho phương pháp chữ ký:

Trong chữ ký phương pháp, các ký tự đại diện .. được sử dụng để biểu thị bất kỳ loại và số lượng đối số được thực hiện bởi một phương pháp

* chỉ định một đối số duy nhất

+0

nhưng cũng có điều này: "Nếu đó là ký tự đại diện" * ", thì bất kỳ đối số nào sẽ khớp, và nếu đó là ký tự đại diện đặc biệt" .. ", thì bất kỳ số đối số nào sẽ khớp với" – MikePatel

+0

Vâng, bạn nói đúng, tôi có cũng đã cập nhật câu trả lời cho các chữ ký phương thức. AspectJ không hỗ trợ '(.., myarg, ..)', không chắc chắn lý do tại sao. –

4

Một số khác đã trả lời một phần câu hỏi trước tôi, vì vậy tôi sẽ chỉ sửa đổi:

.., bla, .. không hoạt động vì nếu bạn ràng buộc tham số bla vào một biến có thể có một số kết hợp phù hợp trong trường hợp loại đối sánh xảy ra nhiều lần trong danh sách tham số. Ví dụ:

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

Bây giờ những gì sẽ xảy ra nếu những lời khuyên là:

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

nên bla bị ràng buộc với giá trị String của b hoặc c?

Các vấn đề liên quan