Java 不安全操作。。。使用-Xlint重新编译:未选中。。。我能';我似乎不明白为什么操作不安全

Java 不安全操作。。。使用-Xlint重新编译:未选中。。。我能';我似乎不明白为什么操作不安全,java,arraylist,Java,Arraylist,我读过很多关于xlint的资料,这些资料都是关于不安全操作的,很多资料都是这样说的: 您可能使用以下命令初始化了arraylist: Arraylist x = new Arraylist(); 相反, List<String> x = new ArrayList<String>(); 只是为了返回单位的数组列表。我仍然不明白为什么它现在能工作,但我换了: this.getUnits(). ... 到 我想当我能够在类中访问Arraylist时,首先尝试返回该Arr

我读过很多关于xlint的资料,这些资料都是关于不安全操作的,很多资料都是这样说的:

您可能使用以下命令初始化了arraylist:

Arraylist x = new Arraylist();
相反,

List<String> x = new ArrayList<String>();
只是为了返回单位的数组列表。我仍然不明白为什么它现在能工作,但我换了:

this.getUnits(). ...


我想当我能够在类中访问Arraylist时,首先尝试返回该Arraylist是愚蠢的,但这仍然不能解释为什么我在尝试返回同一数组时会出错,但只能使用方法而不是引用本身。

您使用了生成警告的原始类型
ArrayList

切勿将参数化类型与原始类型混合


不完全是你在问,但如果你有如下指示:

if (u < 1 || u > 23)
    {
        if (u == 1)
            this.getUnits().add(new Grunt(this));
        if (u == 2)
            this.getUnits().add(new Rifleman(this));
    }
这是第一件事,第二件事,使用

if(u==1){ 
    //code
}else if(u==2) {
    //code
}
而不是

if(u==1){}
if(u==2){}
因为你正在检查他们中的每一个人,即使已经有了匹配。 在您的情况下,我建议使用

switch(u)
{
    case 1:
        //code
        break;
    case 2:
        //code
        break;
    case 3:
        //code
        break;
    .
    .
    .
    default:
}

如果没有这个
if(u<1 | | u>23)

Java实现这一点的方法是创建游戏类型的基类型(接口或抽象类),并将其用作通用列表类型。另一方面,泛型是java的编译时特性,因此只要您知道自己在做什么,并注意使用列表的代码的不同部分,就可以安全地忽略错误?错误到底发生在哪里?这种方法太可怕了。删除它,假装你从来没有写过这么难看的东西。。。我不知道你想做什么,但换个案子更明智。更好的是,有访客的工厂模式。如何声明
units
if (u < 1 || u > 23)
    {
        if (u == 1)
            this.getUnits().add(new Grunt(this));
        if (u == 2)
            this.getUnits().add(new Rifleman(this));
    }
if (u >= 1 && u <= 23)
if(u==1){ 
    //code
}else if(u==2) {
    //code
}
if(u==1){}
if(u==2){}
switch(u)
{
    case 1:
        //code
        break;
    case 2:
        //code
        break;
    case 3:
        //code
        break;
    .
    .
    .
    default:
}