9 注釈、設定およびフィールドの継承
クラスでイベントを拡張すると、イベントの注釈、設定およびフィールドが継承されます。ただし、クラスは、@java.lang.Inheritedメタ注釈がないプライベート・フィールドや注釈を継承しません。
InheritanceSample.java
の例でこれを示します。これにより、FileAction
、FileUpload
および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
ではこのフィールドは継承されません。