【问题标题】:Java Unchecked ExceptionJava 未经检查的异常
【发布时间】:2013-06-11 03:57:46
【问题描述】:

谁能告诉我为什么这个方法会抛出未经检查或不安全的异常?我知道当我尝试编辑我正在迭代的列表时会发生这种情况......在下面,currentAdvanceTactics 等根本没有被迭代。

    public void tacticMeetsRequirements(ArrayList<Tactics> master) {

        for (Tactics a : master) {
            if (meetsrequirements(a)) {
                if (a.movement.equals("Advance")) {
                currentAdvanceTactics.add(a);                   
                } else if (a.movement.equals("Retreat")) {
                currentRetreatTactics.add(a);   
                } else if (a.movement.equals("Guard")) {
                currentGuardTactics.add(a); 
                }
            }       
        }

    }

主列表中使用的对象是这样创建的:

    for (int b = 0; b < numberoftactics; b++) {
         tactic[b] = new Tactics(parsedTactics[b]); 
         tacticsMaster.add(tactic[b]);
    }

parsedTactics 只是读取到不同变量中的原始数据。

tacticsMaster 是这样声明的:

public ArrayList<Tactics> tacticsMaster;

然后当我创建它包含在其中的对象时:

this.tacticsMaster = new ArrayList<Tactics>();

currentAdvanceTactics 列表等都是这样创建的:

    public ArrayList currentGuardTactics = new ArrayList<Tactics>();
    public ArrayList currentAdvanceTactics = new ArrayList<Tactics>();
    public ArrayList currentRetreatTactics = new ArrayList<Tactics>();

提前感谢您的帮助!

【问题讨论】:

    标签: java unchecked-exception


    【解决方案1】:

    您正在使用通用类型 (ArrayList&lt;T&gt;) 的原始版本。这就是您收到警告的原因。

    public ArrayList currentGuardTactics = new ArrayList<Tactics>();
    public ArrayList currentAdvanceTactics = new ArrayList<Tactics>();
    public ArrayList currentRetreatTactics = new ArrayList<Tactics>();
    

    尝试使用参数化版本-

    public List<Tactics> currentGuardTactics = new ArrayList<Tactics>();
    public List<Tactics> currentAdvanceTactics = new ArrayList<Tactics>();
    public List<Tactics> currentRetreatTactics = new ArrayList<Tactics>();
    

    【讨论】:

      【解决方案2】:

      ArrayLists 的声明不是类型安全的。将其更改为:

      private ArrayList<Tactics> currentGuardTactics = new ArrayList<Tactics>();
      private ArrayList<Tactics> currentAdvanceTactics = new ArrayList<Tactics>();
      private ArrayList<Tactics> currentRetreatTactics = new ArrayList<Tactics>()
      

      你应该让成员也privatepublic 声明通常不是最佳实践方式。

      【讨论】:

      • 首选使用接口(此处列出)作为声明的引用类型。
      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2018-01-15
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多