2009-11-26 18 views
19

Tôi có một vấn đề lạ với Eclipse Galileo.
Tôi đặt Java 1.6 làm JRE của mình. Trên dòng mã nàyBộ sưu tập loại không phải là chung; nó không thể được tham số hóa với các đối số <? extends E>

List templates = new ArrayList(); 

Tôi thấy các lỗi sau trong danh sách vấn đề của Eclipse:

Loại Bộ sưu tập là không chung; nó không thể được tham số hóa với các đối số

Tôi không gặp bất kỳ vấn đề gì khi xây dựng dự án này với Ant.
Làm cách nào để khắc phục sự cố? Dường như nó là một vấn đề Eclipse, nhưng vì lỗi này, tôi không thể biên dịch/xuất bản dự án của tôi từ IDE.

+1

là lỗi của bạn thực sự ở số dòng đó? Lỗi dòng là gì nếu bạn làm điều gì đó như: Liệt kê các mẫu; ArrayList mới(); Đừng làm bài tập trên dòng thứ hai, chỉ cần cho tôi biết điều gì sẽ xảy ra. Dường như bạn có một số lớp Bộ sưu tập tùy chỉnh từ lỗi đó không phải là chữ ký: Bộ sưu tập ... không có ý nghĩa. –

Trả lời

6

Đối với những người, những người sẽ đạt được điều đó từ Google: vấn đề là với thư viện mã hóa. Khi tôi gỡ bỏ nó khỏi đường dẫn xây dựng java, dự án được biên dịch thành công.

38

Bạn đang nhập gì List? (xem này thread from 2006)

java.awt.List hoặc java.util.List?

Bởi vì, như nhật thực aptly bình luận, java.awt.List không phải là tham số;)


Kiểm tra cũng là

  • Java Build path: nó không được chứa một tham chiếu đến J2SE 1.4.2 thư viện.
  • Source Compatibility: thuộc tính dự án -> Cài đặt trình biên dịch Java, Khả năng tương thích nguồn 5.0 hoặc 6.0.

Ngoài ra, đã có rất nhiều vấn đề back in 2005 khi mới nhất Eclipse 3.1 beta được hỗ trợ J2SE5, nhưng điều này đã được cố định kể từ đó.

Hãy thử tyo sử dụng JDK6 mới nhất trong dự án của bạn.

+1

nhập java.util.List; – dbf

+1

bắt tốt. Một trong những mục yêu thích của tôi (khi tôi không chú ý) - mặt khác - nó xây dựng trên kiến ​​và không phàn nàn về Danh sách nhưng về Bộ sưu tập. –

1

Đôi khi đó là một trục trặc nhật thực và eclipse -clean cộng với việc làm mới mọi dự án đều hữu ích.

Sửa

Liệu nó thay đổi bất cứ điều gì khi bạn thay thế mã của bạn với:

java.util.List templates = new java.util.ArrayList(); 

hoặc thậm chí

java.util.List<Object> templates = new java.util.ArrayList<Object>(); 

?

+0

Tôi đã thử nó. Ngoài ra tôi đã cố gắng để loại bỏ thư mục .metadata và tạo lại một không gian làm việc. – dbf

0

Một số ý tưởng:

  • kiểm tra thư viện JRE được sử dụng trong dự án của bạn (đánh dấu vào gói thám hiểm).
  • kiểm tra các JRE đã cài đặt trong cài đặt nhật thực (giống như được sử dụng bởi kiến).
  • nhận xét dòng chỉ để kiểm tra xem đó có thực sự là nguyên nhân gây lỗi hay không.
  • nhập lại toàn bộ dòng từ đầu.
  • cài đặt phiên bản nhật thực mới (sạch), trong một thư mục mới (thử nghiệm).
1

đặt mục "JRE Thư viện Hệ thống ..." ở đầu trong dự án, tài sản, java xây dựng con đường, trật tự và xuất khẩu

2

Xin chào, tôi đã xóa thư viện bí ẩn và thư viện không hoạt động. Nhưng sau đó tôi đặt Thư viện Hệ thống JRE ở trên cùng và nó hoạt động. Thật kỳ lạ.

+2

Nhấp chuột phải vào dự án -> Đường dẫn xây dựng Java -> Đặt và di chuyển Thư viện hệ thống JRE di chuyển [jkd1.6] lên trên cùng. Đã làm cho tôi. –

+2

Làm việc cho tôi vì lý do sau: "import java.util.List;" đã nhập một Danh sách có sẵn trước ngày generics. Một cách để tìm hiểu là Ctrl + "nhấp chuột trái" trong Eclipse; nếu nó mở List.class có định nghĩa giao diện không phải là "danh sách giao diện công khai mở rộng Bộ sưu tập " thì nó đang nhập một Danh sách không biết Generics. –

0

làm java buildpath tham chiếu đến lớn hơn hoặc bằng java 1,5

hoặc bạn cố gắng thêm "nhập khẩu java.util.List" tuyên bố sau đó bạn có thể thấy rằng

nhật thực được nói rằng nó là mâu thuẫn với một số loại List khác

ví dụ nó có thể được mâu thuẫn với com.lowagie.xx.xxx.List vv cố gắng tránh những nhập khẩu

báo cáo

3

Bạn đã đặt tên cho danh sách lớp học chưa? tức là:

import java.util.*; 

public class List { // can't do this, name this something else. 

    public static void main(String[] args) { 
     List<Integer> l = new ArrayList<Integer>(); 

    } 

} 
1

sử dụng "nhập khẩu java.util.List"

thay vì nhập khẩu mặc định "nhập khẩu antlr.collections.List;"

và sử dụng JRE5 hoặc cao hơn để hỗ trợ chung của bộ sưu tập API ....

1

ví dụ:

public class AClass<T extends Object> 
{ 
public HashMap<String, String> myMap; 
} 

nếu tôi viết:

public class BClass 
{ 

private AClass aClass = new AClass(); 

public void test() 
{ 

aClass.get("test"); 
//return Object class 

} 

} 

nhưng nếu tôi viết:

public class BClass 
{ 

private AClass<?,?> aClass = new AClass<?,?>(); 

public void test() 
{ 

aClass.get("test"); 
//return String class 

} 

} 
20

Đến muộn nhưng vẫn trả lời, có thể hữu ích cho những người khác vẫn đang gặp vấn đề. Tôi đã nhận được chính xác cùng một vấn đề. Danh sách phù hợp với util.List. Giải pháp là để đặt hàng xuất khẩu của các thư viện. Nếu bạn đang sử dụng Maven hoặc bất kỳ thư viện khác:

Trong Project -> Build Path -> Configure Build Path -> Đặt hàng & Xuất khẩu

Kiểm tra 'JRE Hệ thống thư viện' phải trên 'Maven Dependencies'

Điều này phù hợp với tôi.

+0

Điều này cũng làm việc cho tôi. Vấn đề là Eclipse Jetty (HTTP server) đã được đưa vào một lọ Apache Felix được gọi là nền tảng osgi có chứa một java.util.List repackaged! –

+0

OMG! Điều này cũng làm việc cho tôi. Đã tiết kiệm rất nhiều thời gian. Cảm ơn. – Ahamed

0

Cố gắng loại bỏ import antlr.collections.List; và nhấp Ctr + gian sử dụng java.util

1

Tôi đã thay đổi khẩu

import javax.swing.text.html.HTMLDocument.Iterator; 

để

import java.util.Iterator; 

sau đó nó làm việc cho tôi

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