我似乎无法理解为什么编译器告诉我无法从Object转换为List但它已经是List。有人能指出我没看到的东西吗?
import java.util.List;
import java.util.ArrayList;
public class User {
private List<String> subscribed;
public User() {
this.subscribed = new ArrayList<String>();
}
public List<String> getSubscribed() {
return ((ArrayList<String>)subscribed).clone();
}
}
答案 0 :(得分:3)
clone()
返回类型为Object
的引用(因此与方法的返回类型不兼容)。你可以演员,但做这样的事情更具惯用性:
public List<String> getSubscribed() {
return new ArrayList<String>(subscribed);
}
答案 1 :(得分:2)
以下是java.util.ArrayList.clone()方法的声明
public Object clone()
因此,此语句return ((ArrayList<String>)subscribed).clone();
从预期返回List的方法返回一个Object类型。
因此,编译器抱怨它。
您应该将subscribed.clone()
投射到ArrayList<String>
并返回此值。
这适用于您的public List<String> getSubscribed() {...}
方法
return (ArrayList<String>)(subscribed).clone());
答案 2 :(得分:1)
clone()是Cloneable接口中声明的方法,它的返回类型声明为Object。由于ArrayList实现了这个接口,因此它的clone方法也返回一个Object。
因此,你必须向编译器确认你实际上是在返回一个List,因为尽管如此,ArrayList中的方法clone()返回一个Object:
require 'rails_helper'
RSpec.describe FeatureUpdatesController, type: :controller do
describe "PUT #backlog" do
create(:user) && sign_in(user)
it "updates deploy_status to backlog" do
feature = FactoryGirl.create(:feature)
put :backlog, id: feature.id
expect(feature.deploy_status).to eq("backlog")
end
end