我在使用泛型和接口列表時遇到了問題。使用泛型在列表中鑄造對象
我有一個接口Comment,它由類CommentNews擴展。
評論:
public interface Comment {
public static final String COMMENT_NEWS_PATH = "/comment/news";
public static final String COMMENT_EVENT_PATH = "/comment/event";
public static final String COMMENT_GROUP_PATH = "/comment/group";
public User getUser();
public void setUser(User user);
public String getText();
public void setText(String text);
public Date getModified();
public void setModified(Date modified);
public void setCommentsList(List<?> commentsList);
public <T extends Comment> List<T> getCommentsList();
}
CommentNews:
public class CommentNews implements Comment {
private Integer id;
private User user;
private News news;
private String text;
private List<CommentNews> commentsList;
public CommentNews() {}
// Methods snipped for brevity
public List<CommentNews> getCommentsList() {
return commentsList;
}
public void setCommentsList(List<?> commentsList) {
this.commentsList = (List<CommentNews>) commentsList;
}
}
的問題是與setCommentsList方法,類投實際上並不在列表中投的每個對象。我無法更改方法簽名,因爲這會與接口產生名稱衝突。
有沒有辦法使用泛型進行鑄造?我想避免遍歷列表並手動投射每個對象。
UPDATE: 如果我改變註釋界面。如果我的界面
public <T extends Comment>void setCommentsList(List<T> commentsList);
和CommentNews類更改爲
public void setCommentsList(List<CommentNews> commentsList) {
this.commentsList = commentsList;
}
它應該是類型安全的,但是這導致名稱在界面和類之間發生衝突。
每個對象都會施放什麼?演員陣容不會改變任何對象。通過執行轉換可能發生的唯一情況是ClassCastException。 – 2012-03-04 12:19:01