我试图将由文件创建的对象保存到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){
}
}
}
这是 main 函数:
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);
}
对于所有变量都使用立陶宛语感到抱歉,但是我认为它不会改变任何代码可读性。
答案 0 :(得分:0)
在您的示例中,您将实例化一个新的Viskas
。由于Viskas
扩展了Darbuotojas
并且没有自己的构造函数,因此Darbuotojas
的构造函数将使用缺少的参数来调用。要解决此问题,请在创建新的Viskas
时传递所需的参数:
(String vardas, String pareigos, int gm, Float atlyginimas)
或为Darbuotojas
创建无参数的构造函数。
答案 1 :(得分:0)
Darbuotojas具有定义的构造函数。 Viskas扩展了Darbuotojas,但并未调用其父级Darbuotojas的构造函数。只需为Viskas创建一个构造函数,然后将super()放在顶部。
答案 2 :(得分:0)
也许一个例子有助于更好地解释该解决方案。假设您有两个类,分别称为Vehicle和Car。 Car扩展了Vehicle,以便Car可以继承Vehicle的所有功能。
父类:
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();
}
}
当您在父类(如下面)中定义了构造函数时,它将不再具有带有空参数的默认构造函数。
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);
}
}