2011-07-28 37 views
6

hamcrest hasKey() Đây là mã:tôi không thể biên dịch phương pháp

Map<Foo, String> map; 
org.hamcrest.MatcherAssert.assertThat(map, 
    org.hamcrest.Matchers.hasKey(new Foo())); 

Đây là những gì trình biên dịch đang nói:

cannot find symbol method assertThat(java.util.Map<Foo,java.lang.String>, 
org.hamcrest.Matcher<java.util.Map<Foo,java.lang.Object>>) 

Tại sao và những gì tôi có thể làm gì?

Trả lời

15

tôi nghi ngờ bạn cần một cái gì đó như:

MatcherAssert.assertThat(map, Matchers.<Foo, String>hasKey()); 

Bằng cách đó bạn có thể chỉ định các loại giá trị cho cuộc gọi hasKey phương pháp. Mặc dù trông có vẻ xấu xí và tôi hơi ngạc nhiên khi suy luận kiểu không giúp bạn ...

+0

Điều này đã làm tôi thất vọng trong nhiều năm. Năm! Cảm ơn, Jon. – Trenton

7

Có vẻ như bạn đã gặp lỗi tương tự như tôi đã làm. Đây có phải là trong Hamcrest> 1.1? Họ đã thay đổi các generics trên matchers của họ giữa 1,1 và 1,2. Tôi nộp một lỗi hamcrest đây: http://code.google.com/p/hamcrest/issues/detail?id=143

nhưng nó quay ra rằng đây thực sự là một lỗi trong trình biên dịch mà không thể được cố định trong JDK 6 nhưng đã được cố định trong 7: http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=72ce99618021685c3570069c8f60b?bug_id=7034548

Như Jon đã đề cập, có một số cách để làm việc xung quanh nó, nhưng tất cả họ phá vỡ giao diện đẹp, thông thạo của Hamcrest.

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