Jdkでの面白い機能(更新中)
目次
Record
せいげんじょうけん
作成方法
public record Person(
String name,
Integer age,
Job job
) {
public Person{
//Do Something
}
public static int test = 100;
public void testUp() {
test++;
}
public static int getTest() {
return test;
}
private void testDown() {
test--;
}
}
Jsonとして作成
JsonはJackson-databindで作成できます.
public record Person2(
@JsonProperty("Name") String name,
@JsonProperty Integer age,
@JsonIgnore Job job
) {}
Main에서
Person person = new Person("Arakene", 25, new Job("Android Developer"));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(person);
実行結果{"Name":"Arakene","age":25}
Microbenchmark Suite
パフォーマンステストのツールの1つとして、JMH(Java MicroBenchmark Harness)が命名されています.
依存の設定
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.32</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.32</version>
</dependency>
テストコード
@State(Scope.Thread)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public class BenchMarkTest {
int max = 999;
List<Integer> testList = new ArrayList<>();
@Setup //테스트 전 준비 과정
public void set(){
for (int i = 0; i < max; i++) {
testList.add(i);
}
}
@BenchmarkMode(Mode.AverageTime)
@Benchmark //테스트할 메소드
public void originLoopWithGetSize() {
int sum = 0;
for (int i = 0; i < max; i++) {
sum += testList.get(i);
}
}
}
public static void main(String[] args) throws IOException, RunnerException {
Options opt = new OptionsBuilder()
.include(BenchMarkTest.class.getSimpleName())
.forks(1)
.build();
new Runner(opt).run();
}
Annotations
テストに使用するパラメータのステータスを指定できます.テストが進むにつれて、値を変更する必要があるか、常に同じ値を@Stateとして指定する必要がある場合があります.
ベンチマークテストをどのように実行しますか.
平均運転時間
出力結果に使用する時間単位を設定し、TimeUnitクラスを使用
どちらもメソッドに適用され,@SetupはJunitのBeforeと同じである.実行前の設定をテストします.@TerDownはJunitのAfterなどの仕事をしています.テスト後の処理に使用します.両方ともレベルを設定できます.
Options
Annotationでは複数の基準を設定できますが、Optionで調整することもできます.
Options opt = new OptionsBuilder()
.include(BenchMarkTest.class.getSimpleName())
.warmupIterations(1)
.measurementIterations(1)
.forks(1)
.build();
new Runner(opt).run();
Text Blocks
マルチテキスト文字列は良い機能です.
String query = "SELECT \"name\", \"email\" FROM \"users\"\n" +
"WHERE \"username\" = 'kbh';";
String query = """
SELECT "name", "email" FROM "users"
WHERE "username" = 'kbh';
""".stripIndent();
不要なスペースを外して、欲しいデータだけを入れることができます.
Helpful NullPointerException
既存NPE
従来のチェーンメソッドではnpeが発生すると,具体的にどこで発生するか分からない.
JDK 14以降
String name = person.personDetails.name;
를 실행한 경우
Exception in thread "main" java.lang.NullPointerException: Cannot read field "name" because "person.personDetails" is null
at Main.main(Main.java:6)
와 같이 어디서 null이 나온건지 알 수 있다.
使用方法
Intellij規格
VMオプションに-XX:+ShowCodeDetailsInExceptionメッセージを追加すればよい.
結果の使用
String name = person.personDetails.name;
이 코드를 실행시키면
Exception in thread "main" java.lang.NullPointerException: Cannot read field "name" because "person.personDetails" is null
at Main.test(Main.java:42)
at Main.main(Main.java:24)
peronalDetails가 null 인지 name이 null인지 알 수 있다.
Reference
この問題について(Jdkでの面白い機能(更新中)), 我々は、より多くの情報をここで見つけました https://velog.io/@arakene/Jdk-살펴보던-중-재밌어-보이는-기능들テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol