9 注釈、設定およびフィールドの継承

クラスでイベントを拡張すると、イベントの注釈、設定およびフィールドが継承されます。ただし、クラスは、@java.lang.Inheritedメタ注釈がないプライベート・フィールドや注釈を継承しません。

InheritanceSample.javaの例でこれを示します。これにより、FileActionFileUploadおよびImageUploadの3つのイベントが定義されます。

import jdk.jfr.Category;
import jdk.jfr.Description;
import jdk.jfr.Event;
import jdk.jfr.Label;
import jdk.jfr.Name;
import jdk.jfr.StackTrace;
 
public class InheritanceSample {

    @Category("Files")
    @StackTrace(false)
    abstract static class FileAction extends Event {
        @Label("In Progress")
        boolean inProgress;
    }

    @Name("com.oracle.FileUpload")
    @Description("Uploaded file that might be a text file")
    @Label("File Upload")
    static class FileUpload extends FileAction {
        @Label("Text file")
        private boolean isText;
    }

    @Name("com.oracle.ImageUpload")
    @Label("Image Upload")
    static class ImageUpload extends FileUpload {
    }

    public static void main(String... args) {
        FileUpload fu = new FileUpload();
        fu.inProgress = true;
        fu.isText = false;
        fu.commit();

        ImageUpload iu = new ImageUpload();
        iu.inProgress = false;
        iu.commit();
    }
}

次のコマンドを使用して、InheritanceSampleを実行します:

java -XX:StartFlightRecording:filename=i.jfr InheritanceSample.java
jfr print --events FileUpload,ImageUpload i.jfr

最後のコマンドでは、次のような出力が表示されます:

com.oracle.FileUpload {
  startTime = 15:22:28.794
  isText = false
  inProgress = true
  ...
}

com.oracle.ImageUpload {
  startTime = 15:22:28.822
  inProgress = false
  ...
}

FileActionなどの抽象イベント・クラスは登録されていないため、そのメタデータを検査に使用することはできません。

@Name@Descriptionなど、@java.lang.Inherited注釈がない注釈はクラスに継承されません。

フィールドisTextはプライベートであるため、ImageUploadではこのフィールドは継承されません。