【发布时间】:2022-01-22 00:42:55
【问题描述】:
我试图在一个抽象类中构建这个抽象方法并在我的一个子类中使用它,它的返回类型应该是 List / ArrayList。我真的在语法上苦苦挣扎,之前提出的大部分问题都不是我的特殊问题。
对我来说最重要的是用简单的话来描述它。
- 让我用一个方法
- 该方法的输出(返回)应该是一个......我还不知道什么对象的列表
- 它的原始声明是抽象的
这里是抽象类*
private int employeeID;
private String name, sID, department;
private double salary;
// Constructor (empty)
public Employee() {
}
// Constructor => Every Employee has at least this attributes => Subclasses may have additonal attributes
public Employee(int employeeID, String name, String sID, double salary, String department) {
this.employeeID = employeeID;
this.name = name;
this.sID = sID;
this.salary = salary;
this.department = department;
}
// Getters and Setters below
//.......
// Abstract method with generic list as return type
public abstract <T> List<T> read(String path);
这是子类
public class Clerk extends Employee {
public Clerk() {
}
public Clerk(int employeeID, String name, String sID, double salary, String department) {
super(employeeID, name, sID, salary, department);
}
@Override
public <T> List<T> read(String path) {
// TODO Auto-generated method stub
String line = null;
List<Clerk> clerk = new ArrayList<Clerk>();
try {
BufferedReader reader = new BufferedReader(new FileReader(path));
reader.readLine();
while ((line = reader.readLine()) != null) {
String[] clerkValues = line.split(";");
clerk.add(new Clerk(Integer.parseInt(clerkValues[0]), clerkValues[1], clerkValues[2], Double.parseDouble(clerkValues[3]), clerkValues[4]));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return clerk; // Error here,Type mismatch: cannot convert from List<Clerk> to List<T>
我总是遇到错误。而且我不想将超类(Employee)构建为像 =>
这样的通用类 public abstract class Employee <T>{
// Code here
}
提前感谢您的支持。
【问题讨论】:
-
抱歉缺少abstaract 1234562的类名 => 它是公共抽象类Employee{}
-
您可能不想将超类构建为泛型类,但您必须这样做。
-
不能只使用抽象的泛型方法吗?我的意思是对象的变量根本不会改变。只有在子类中,我才能添加一个类来构建新对象。例如“主管”、“看门人”、“经理”等......
-
您确定需要抽象方法吗?如果是这样,它可以返回
List<Employee>而不在子类中进行专门化吗?这段代码的调用者是什么样的? -
您的覆盖没有返回
T的列表。相反,它是Clerk的列表。 Afaik,没有超级(抽象)类方法签名可以被覆盖以返回不同的列表类型,这似乎是您正在尝试的。考虑重写您的问题以解释您尝试使用此方法完成的任务。 (需要一个Clerk实例来读取Clerks 的列表没有多大意义。)然后有人可以建议一个合适的模式。
标签: java list generics arraylist abstract