我有两个班级:
子类:接待员类有两个方法ReadDoctorList(String readLine)和DisplayDoctorList()。
父类:带有readLine方法的基础类,我将方法作为参数传递,该方法来自班级接待员。
我的想法是逐行读取txt文件并提取一些行并将它们存储在ArrayList中。我可以随时打印出值。 但是,如果我从TestClass中调用它,那么arraylist就会变空。
非常感谢您的回答!
Output:
Tonny Bob
Mike tyson
The size is: 0
txt file:
Tonny,Bob,abc,abc,D
Mike,tyson,abc,abc,D
Laura,jack,abc,abc,P
Jimmy,viva,abc,abc,P
public class TestClass {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Receptionist obj = new Receptionist();
obj.DisplayDoctorList();
System.out.println("The size is: " + obj.doctorlist.size());
}
}
public class Base {
String pathusers = "/Users/MacTonish/users.txt";
ArrayList<String> doctorlist = new ArrayList<String>();
public void readLines(Object instance, String path, Method method)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
try {
File txt = new File(path);
BufferedReader reader = new BufferedReader(new FileReader(txt));
String readLine = null;
while ((readLine = reader.readLine()) != null) {
method.invoke(instance, readLine); //something is fishy here.
}
reader.close();
} catch (
IOException e) {
e.printStackTrace();
}
}
}
class Receptionist extends Base {
public void DisplayDoctorList() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
Method method = Receptionist.class.getMethod("ReadDoctorList", String.class);
readLines(new Receptionist(), pathusers, method);
}
public void ReadDoctorList(String readLine) {
String[] token = readLine.split(",");
if (token[4].equals("D")) {
doctorlist.add(token[0] + " " + token[1]);
System.out.println(token[0] + " " + token[1]); //Print out is ok.
}
}
}
答案 0 :(得分:2)
如果您对接待员代码进行以下更改,则应该有效
//readLines(new Receptionist(), pathusers, method);
//Here you are creating a new object but while printing you are using last created Object of ReceptionList
将上述代码更改为
readLines(this, pathusers, method);