有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类在java中将具有多个变量类型的对象传递到arraylist时遇到问题

我试图将一个从文件创建的对象保存到arraylist中,但在一个三类程序中,我很难做到这一点。我得到一个错误,告诉我创建构造函数,但当我自动创建它们时,我得到一个错误,说:Constructor cannot be applied to given types。我不知道这是什么意思。简言之,这件事我已经做了好几个小时了,现在还没弄明白

public class Darbuotojas {
    String vardas;
    String pareigos;
    int gm;
    Float atlyginimas;

    public Darbuotojas(String vardas, String pareigos, int gm, Float atlyginimas){
        this.vardas = vardas;
        this.pareigos = pareigos;
        this.gm = gm;
        this.atlyginimas = atlyginimas;
    }
}

下面是我读取文件并尝试将对象Darbuotojas放入ArrayList的代码:

public class Viskas extends Darbuotojas{
    String gm1;
    String atlyginimas1;
    ArrayList<Darbuotojas> darbuotojai = new ArrayList<Darbuotojas>();

    public void failas(String fl) throws IOException{
        //Failu nuskaitymas po zodi
        File file = new File(fl);
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            String line = null;

            while ((line = br.readLine()) != null){
                String [] tokens = line.split("/");
                vardas = tokens[0];
                pareigos = tokens[1];
                gm1 = tokens[2];
                gm = Integer.parseInt(gm1);
                atlyginimas1 = tokens[3];
                atlyginimas = Float.parseFloat(atlyginimas1);
                System.out.print(vardas.toUpperCase() + " ");
                System.out.print(pareigos.toUpperCase() + " ");
                System.out.print(gm + " ");
                System.out.println(atlyginimas);  
                Darbuotojas drb = new Darbuotojas(vardas,pareigos,gm,atlyginimas);
                darbuotojai.add(drb);
                System.out.println(drb);
            }

            br.close();
        }
        catch(FileNotFoundException e){
        }
    }
}

以下是主要功能:

public static void main(String[] args) throws IOException {
    Scanner kb = new Scanner(System.in);
    System.out.println("Iveskite duomenu vailo pavadinima su failo tipu: ");
    String fl = kb.next();

    Viskas ddd = new Viskas();

    ddd.failas(fl);
}

我很抱歉所有的变量都是立陶宛语的,但我不认为这会改变代码的可读性


共 (3) 个答案

  1. # 1 楼答案

    Darbuotojas有一个已定义的构造函数。Viskas扩展了Darbuotojas,但它不调用其父Darbuotojas的构造函数。只需为Viskas创建一个构造函数,并将super()放在顶部

  2. # 2 楼答案

    也许一个例子有助于更好地解释解决方案。假设有两个类,分别是Vehicle和Car。Car扩展了车辆,使车辆能够继承车辆的所有特征

    父类:

    public class Vehicle{
        String name;
        int age;
    }
    

    儿童班:

    public Class Car extends Vehicle {
     String type;
    }
    

    当您没有在类中定义构造函数时,它会自动在类中创建这些构造函数,下面是它的样子

    父类:

    public class Vehicle{
    
        String name;
        int age;
    
        public Vehicle(){
            super();
        }
    }
    

    儿童班:

    public Class Car extends Vehicle {
        String type;
    
        public Car(){
            Super();
        }
    }
    

    当您在父类(如bellow)中定义构造函数时,它将不再具有带有空参数的默认构造函数

    public class Vehicle{
    
        String name;
        int age;
    
        public Vehicle(String name, int age){
            this.name = name;
            this.age = age;
        }
    }
    

    所以,如果您试图创建一个子类而不定义构造函数,它将如下所示

    public Class Car extends Vehicle {
        String type;
    
        public Car(){
            Super();
        }
    }
    

    现在上面将给出一个编译错误,因为子类(Car)正试图用空参数调用其父类(Vehicle)构造函数。所以要解决这个问题,你有两个选择

    选项1:将空参数构造函数添加到父类

    public class Vehicle{
    
        String name;
        int age;
    
        public Vehicle(){
        }
    
        public Vehicle(String name, int age){
            this.name = name;
            this.age = age;
        }   
    }
    

    选项2:在调用父类构造函数的子类中定义一个构造函数

    public Class Car extends Vehicle {
        String type;
    
        public Car(){
            String defaultName = "";
            int defaultAge = 0;
            Super(defaultName, defaultAge);
        }
    }
    
  3. # 3 楼答案

    在您的示例中,您正在实例化一个新的Viskas。由于Viskas扩展了Darbuotojas并且没有自己的构造函数,因此调用Darbuotojas的构造函数时缺少参数。要解决此问题,请在创建新Viskas时传入所需的参数:

    (String vardas, String pareigos, int gm, Float atlyginimas)
    

    或者为Darbuotojas创建无参数构造函数