我有一个抽象类(AveragedDataRecord),我需要进一步抽象(DataRecord),所以我可以将它扩展到原始类和一个新的具体类(SummedDataRecord),我遇到了一些问题从原始抽象类转换为新的超类的方法。
public abstract class DataRecord{
protected abstract DataRecord getFirstRecord(ArrayList<T> dataList);
protected abstract DataRecord getLastRecord(ArrayList<T> dataList);
protected DateTime getFirstRecordTimestamp(ArrayList<T> dataList){
DateTime result = new DateTime(DEFAULT_DATETIME);
DataRecord record = this.getFirstRecord(dataList);
if(null != record)
result = record.getRecordDateTime();
return result;
}
protected DateTime getLastRecordTimestamp(ArrayList<T> dataList){
DateTime result = new DateTime(DEFAULT_DATETIME);
DataRecord record = this.getLastRecord(dataList);
if(null != record)
result = record.getRecordDateTime();
return result;
}
}
public abstract class AveragedDataRecord extends DataRecord<AveragedDataRecord> {
public AveragedDataRecord getFirstRecord(ArrayList<AveragedDataRecord> dataList){
// Implementation
}
public AveragedDataRecord getLastRecord(ArrayList<AveragedDataRecord> dataList){
// Implementation
}
public static void myMethod(ArrayList<AveragedDataRecord> dataList){
// beginning of method code
fileWriter.write(itemA, itemB, **getLatestTimestamp(dataList)**);
// end of method code
}
}
我遇到的问题是上面提到的方法调用显示错误。 &#34;快速修复&#34;建议getLatestTimestamp()需要是静态的。
使getLatestTimestamp()静态在声明中给出错误,因为Java&#34;无法对非静态类型T&#34;进行静态引用。
我已经快速修复了这个问题,并且没有在我所属的论坛或谷歌上找到任何关于这个问题的提及。我不能相信我是这个曾经发生过的唯一一个人,但是如果解决这个问题的话,我还没有幸运地找到它。
答案 0 :(得分:1)
如果要在静态上下文中使用getLatestTimeStamp(),即使用静态方法,则getLatestTimeStamp()必须是静态方法,这就是快速修复建议的原因将getLatestTimeStamp方法标记为静态。另一方面,您可以创建一个定义了getLatestTimeStamp方法的类的实例,然后通过该引用访问getLatestTimeStamp。
要在静态上下文中使用非静态方法,必须通过引用访问非静态方法。
请记住,非静态字段不能在静态上下文中使用,除非通过引用。
使用以下代码替换代码中的 getLatestTimestamp(dataList):
new /*/().getLatestTimestamp(dataList);
// Replace /*/ with the name of the class in which getLatestTimestamp is created