Я пытаюсь сохранить объект, созданный из файла, в arrayylist, и у меня проблемы с тем, чтобы сделать именно это в программе с тремя классами. Я получаю сообщение об ошибке создания конструкторов, но когда я создаю их автоматически, я получаю сообщение об ошибке: 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);
}
Прошу прощения за то, что все переменные на литовском языке, но я не думаю, что это что-то меняет с точки зрения читаемости кода.
Спасибо за ответ, @ AL-un, я не объявлял их внутри цикла, так как я их исключил в классе Darbuotojas. полное сообщение гласит: «construcotr Darbuotojas в классе Darbuotojas не может применяться к данным типам; требуется: String, String, int, Float; найдено: нет аргументов; причина: фактические и формальные списки аргументов различаются по длине».




В вашем примере вы создаете экземпляр нового Viskas. Поскольку Viskas расширяет Darbuotojas и не имеет собственного конструктора, конструктор для Darbuotojas вызывается с отсутствующими параметрами. Чтобы решить эту проблему, передайте необходимые параметры при создании нового Viskas:
(String vardas, String pareigos, int gm, Float atlyginimas)
или создайте конструктор без параметров для Darbuotojas.
Привет, @Denis, спасибо за ответ. Когда я создаю конструктор без параметров для Viskas, код не компилируется, и я получаю сообщение об ошибке: «construcotr Darbuotojas в классе Darbuotojas не может применяться к данным типам; требуется: String, String, int, Float; найдено: нет аргументов; причина: фактическая и формальная. списки аргументов различаются по длине ".
В моем первоначальном комментарии была опечатка; Я имел в виду создать конструктор без параметров для Darbuotojas. Отредактировано.
У Darbuotojas есть определенный конструктор. Viskas расширяет Darbuotojas, но не вызывает конструктор своего родительского Darbuotojas. Просто создайте конструктор для Viskas и поместите super () вверху.
Привет, @Daniel, спасибо за комментарий. Я сделал то, что предлагали вы и @Denis, и, похоже, теперь он компилируется. Спасибо вам, ребята. Но теперь я пытаюсь распечатать ArrayList с помощью System.out.println(Arrays.toString(darbuotojai.toArray()));, и кажется, что где-то все пошло не так, все, что он распечатывает, это «kontras.Darbuotojas@55f96302» для каждого элемента в списке.
Это ожидаемое поведение, потому что вы пытаетесь напечатать объект. Если вам нужно получить некоторую информацию при печати объекта, попробуйте реализовать метод toString () внутри класса Darbuotojas. stackoverflow.com/questions/3615721/…
Может быть, пример поможет лучше объяснить решение. Предположим, у вас есть два класса под названием «Автомобиль» и «Автомобиль». 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);
}
}
Как в вашем цикле
whileвы объявляли переменныеvardasиpareigos? (вvardas = tokens[0]иpareigos = tokens[1]. А можете ли вы опубликовать полное сообщение об ошибке, чтобы мы могли увидеть, что не так с конструктором?