Java instanceof check后不安全的参数化ArrayList强制转换

Java instanceof check后不安全的参数化ArrayList强制转换,java,Java,嗨,伙计们,我有一个不安全的石膏操作问题。 问题就在这里。我需要一个构造函数,它可以接受不同类型的命令(播放列表、用户操作等),或者应该接受。所以我决定给它一个参数作为对象,并检查调用后接收的类型。问题是其中一个是参数化的ArrayList(ArrayList),由于无法检查参数化的ArrayList,我必须“深入”查看。第一步检查它是否是ArrayList,第二步检查它的内容类型。 后来的问题是,我得到了一个不安全的演员警告,我还不知道如何处理 问候 public Order(int

嗨,伙计们,我有一个不安全的石膏操作问题。 问题就在这里。我需要一个构造函数,它可以接受不同类型的命令(播放列表、用户操作等),或者应该接受。所以我决定给它一个参数作为对象,并检查调用后接收的类型。问题是其中一个是参数化的ArrayList(ArrayList),由于无法检查参数化的ArrayList,我必须“深入”查看。第一步检查它是否是ArrayList,第二步检查它的内容类型。 后来的问题是,我得到了一个不安全的演员警告,我还不知道如何处理

问候

    public Order(int aTyp, Object aOrderContent) {
    this.orderTyp = aTyp;
    if (aOrderContent instanceof ArrayList< ? >) {
        ArrayList<?> objList = (ArrayList< ? >)aOrderContent;
    if (objList.get(0) != null && (objList.get(0)) instanceof PlayList) {
        playList.addAll((ArrayList<PlayList>)aOrderContent) ;
    }        

    } else if (aOrderContent instanceof UserOP) {

    }
}
公共秩序(int aTyp,对象aOrderContent){
this.orderTyp=aTyp;
if(ArrayList的aOrderContent实例<?>){
ArrayList对象列表=(ArrayList<?>)aOrderContent;
如果(objList.get(0)!=null&(objList.get(0))播放列表实例){
playList.addAll((ArrayList)aOrderContent);
}        
}else if(UserOP的aOrderContent实例){
}
}

而不是让构造函数对构造函数执行对象重载。让一个人使用
列表
和一个人使用
UserOP
ect。此外,如果
列表
的所有选项都从同一界面扩展,那么您就可以使用
列表
而不是
列表
重新考虑您的设计,这将是一个理想的选择。不要让构造函数接受
对象
。这太不透明了,允许代码的使用者传递任何类型的代码。听起来你应该这样做(尽管根据你的部分例子很难判断)。可能的解决办法:

// Might need an upper bound on T if you want to limit the allowed parameterizations
class Order<T> {

    private final int orderTyp;
    private final List<T> someList = new ArrayList<>();

    public Order(int aTyp, List<t> aOrderContent) {
        this.orderTyp = aTyp;
        someList.addAll(aOrderContent);
    }
}
//如果要限制允许的参数化,可能需要T的上限
阶级秩序{
私有最终int orderTyp;
private final List someList=new ArrayList();
公共秩序(int aTyp,列表aOrderContent){
this.orderTyp=aTyp;
addAll(aOrderContent);
}
}
请记住,如果您(在编译时)知道所有可能的类型值,那么最好不要对
orderTyp
使用
int


旁注:如果
列表
为空,则不返回
null