静态/抽象冲突

时间:2015-09-30 00:38:50

标签: java static abstract

我有一个抽象类(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;进行静态引用。

我已经快速修复了这个问题,并且没有在我所属的论坛或谷歌上找到任何关于这个问题的提及。我不能相信我是这个曾经发生过的唯一一个人,但是如果解决这个问题的话,我还没有幸运地找到它。

1 个答案:

答案 0 :(得分:1)

如果要在静态上下文中使用getLatestTimeStamp(),即使用静态方法,则getLatestTimeStamp()必须是静态方法,这就是快速修复建议的原因将getLatestTimeStamp方法标记为静态。另一方面,您可以创建一个定义了getLatestTimeStamp方法的类的实例,然后通过该引用访问getLatestTimeStamp。

要在静态上下文中使用非静态方法,必须通过引用访问非静态方法。

请记住,非静态字段不能在静态上下文中使用,除非通过引用。

使用以下代码替换代码中的 getLatestTimestamp(dataList)

    new /*/().getLatestTimestamp(dataList);

    // Replace /*/ with the name of the class in which getLatestTimestamp is created