2012-04-08 28 views
16

một đối tượng Danh sách này được cắn tôi trong mông ..Tôi không thể thêm thành phần vào danh sách? UnsupportedOperationException

Bất cứ lúc nào tôi cố gắng thêm một yếu tố để nó, nó tạo ra này:

Caused by: java.lang.UnsupportedOperationException 
     at java.util.AbstractList.add(AbstractList.java:148) 
     at java.util.AbstractList.add(AbstractList.java:108) 

Dòng sản xuất lỗi là không đáng kể, nhưng ở đây nó là anyways:

AdventureLobbies.players.add(args[0].toLowerCase()); 

Tôi có nên không truy cập nó tĩnh không?

khai thực tế của biến:

AdventureLobbies.players = Arrays.asList(rs.getString("players").toLowerCase().split(","));

Bất kỳ ý tưởng? Không thể tìm thấy bất kỳ thứ gì trên Google đáng giá.

+1

Hãy cho chúng tôi biết tuyên bố cho 'AdventureLobbies.players'. –

+2

Tôi đề nghị thứ hai của KirkWoll. Tôi sẽ không ngạc nhiên nếu 'AdventureLobbies.players' là một danh sách bất biến, có thể được trả về từ [Collections.unmodifiableList] (http://docs.oracle.com/javase/6/docs/api/java/util /Collections.html#unmodifiableList(java.util.List)) hoặc phương thức khác hoàn thành cùng một điều. –

+0

Đồng ý với cả hai bình luận trước đó - không biết chúng ta là kiểu đối tượng nào (vì vậy tại sao chúng ta cần xem khai báo hoặc gọi phương thức mà bạn có danh sách này), thật khó để biết lý do tại sao điều này xảy ra là một dự đoán tốt. – jefflunt

Trả lời

37

Arrays.asList() sẽ cung cấp cho bạn một danh sách không thể sửa đổi, và đó là lý do tại sao phần bổ sung của bạn không thành công. Hãy thử tạo danh sách với:

AdventureLobbies.players = new ArrayList(Arrays.asList(rs.getString("players").toLowerCase().split(","))); 
5

Các tài liệu java nói asList @SafeVarargs public static <T> List<T> asList(T... a) "trả về một danh sách kích thước cố định được hỗ trợ bởi các mảng được chỉ định"

Danh sách của bạn là kích thước cố định, có nghĩa là nó có thể không phát triển hoặc thu nhỏ và vì vậy khi bạn gọi thêm, nó ném một ngoại lệ hoạt động không được hỗ trợ

0

Ngoại lệ này rất quen thuộc với việc truy cập các đối tượng sẽ không cho phép truy cập theo với các quy tắc ngôn ngữ java như truy cập các đối tượng không thay đổi được, vì lý do đó, hãy khởi tạo nó theo cách sau để thay thế:

AdventureLobbies.players = new ArrayList(Arrays. 
asList(rs.getString("players").toLowerCase().split(","))); // Perfectly done 
Các vấn đề liên quan