【问题标题】:Java. Trouble defining a method爪哇。定义方法时遇到问题
【发布时间】:2015-07-30 05:49:46
【问题描述】:

我有一个类 Mappa,它有一个创建两个矩阵的同名方法

package mappa.product;

import mappa.Settore;

public class Mappa {
    private Name mappaName;
    private final Settore [][] settore;
    private int Matrice [][];
    private static final int X=23;
    private static final int Y=14;
    public Mappa (){
        settore = new Settore[X][Y];
        for (int i=0; i < X; i++){
            for (int j=0; j<Y; j++) {
                settore[i][j] = new Settore (i,j);
            }
        }
        Matrice = new int[23][14];
    }



    public int[][] getMatrice() {
        return Matrice;
    }

    public void setMatrice(int matrice[][]) {
        Matrice = matrice;
    }

    public Name getMappaName() {
        return mappaName;
    }

    public void setMappaName(Name mappaName) {
        this.mappaName = mappaName;
    }
    public Settore[][] getSettori(){
        return settore;
    }
    public void addSettori(){
        Settore.add(settore);
    }


}

然后我有类MappaCreator(在另一个包中),这个类的主要功能是调用类Mappa的方法mappa(),当我像这样直接在类中编写时没有问题

package mappa.creator;
import mappa.product.*;
public class MappaCreator {
    Mappa mappa = new Mappa();  
        public MappaCreator(){
            }     
}
package mappa.creator;

import mappa.product.*;

public class MappaFermiCreator extends MappaCreator {

    public MappaFermiCreator() {
        Mappa mappa = new MappaFermi();
        this.mappa=mappa;
    }


}

但是当我在 MappaCreator() 方法中写入它时,我在 MappaFermiCreator() 方法中收到警告“未使用局部变量的值”和错误“mappa 无法解析或不是字段”子类 MappaFermiCreator

package mappa.creator;
import mappa.product.*;
public class MappaCreator {
        public MappaCreator(){
            Mappa mappa = new Mappa();//The value of the local variable is not used
        }
}
package mappa.creator;

import mappa.product.*;

public class MappaFermiCreator extends MappaCreator {

    public MappaFermiCreator() {
        Mappa mappa = new MappaFermi();
        this.mappa=mappa;//mappa cannot be resolved or is not a field
    }


}

【问题讨论】:

    标签: java methods import package subclass


    【解决方案1】:

    MappaCreator 及其子类 MappaFermiCreator 都没有实例变量 mappa,因此无法编译。将此添加到超类MappaCreator

    protected Mappa mappa;

    或将此添加到MappaFermiCreator

    private Mappa mappa;

    【讨论】:

      【解决方案2】:
      public MappaCreator(){
                  Mappa mappa = new Mappa();//The value of the local variable is not used
              }
      

      mappa 是此方法(构造函数)中的局部变量,因为这是唯一的一行,所以从不使用该变量


      public MappaFermiCreator() {
              Mappa mappa = new MappaFermi();
              this.mappa=mappa;//mappa cannot be resolved or is not a field
          }
      

      this.mappa 从未声明,因此无法解析。


      你不应该在子类中重复超类的逻辑。避免这种情况的一种方法是使用super() 来使用超类中定义的功能。

      public class MappaCreator 
      {
          private Mappa mappa;
      
          public MappaCreator(Mappa mappa)
          {
                  this.mappa = mappa;
          }
      
          public MappaCreator()
          {
                  this(new Mappa());
          }
      }
      
      
      public class MappaFermiCreator extends MappaCreator 
      {
          public MappaFermiCreator() 
          {
              super(new MappaFermi());
          }
      }
      

      这假设MappaFermi extends Mappa

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        • 2016-12-28
        • 1970-01-01
        • 2019-09-13
        • 1970-01-01
        相关资源
        最近更新 更多