我不知道我的大脑是否愚弄我,或者这真的不起作用。Java抽象类“实例变量”
我需要不同类型的日志记录类的,所以我创建了一个抽象类,所有类都将具有相同的唯一定义是writeToLog的处理方式:
public abstract class LoggerTemplate {
protected String filename ="log/";
protected File logfile;
protected FileWriter fw;
public void writeToLog(String message) {
if(fw != null) {
try {
message = new SimpleDateFormat("dd-MM-hh:mm").format(new Date()) + " " + message;
fw.write(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
具体子类将实现逻辑的其余部分在其构造,即其中之一:
public class JitterBufferLogger extends LoggerTemplate {
public JitterBufferLogger() {
super();
filename += new SimpleDateFormat("yyyyddMMhhmm'.log'").format(new Date());
if(!new File("log/").exists())
new File("log").mkdir();
logfile = new File(filename);
try {
logfile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
fw = new FileWriter(logfile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但是,当我调试,我可以看到调用writeToLog特定记录时,跳入LoggerTemplate方法,因此FW和日志文件为空。所以它不工作。
是不是它应该工作或做我只是乱七八糟的东西有点起来,应该进入周末;-)
这个“应该”工作(关于分配超类成员变量)。你是否调试过JitterBufferLogger的构造函数?大概是标准输出到一个意想不到的位置,你错过了堆栈跟踪。另外,'log/.20122012.log'(斜杠)不是有效的文件名 - 请参阅logfile.createNewFile(文件名)。 – MartinK
请给出一个示例调用。 –
你是否打开文件编写器检查堆栈跟踪? Per @ MartinK的评论,无效的文件名可能是你的问题。 –