텍스트 블록
- JDK11에서 JSON 데이터 입력할때
- JSON 데이터를 만들어서 전송하기 위해서 번거로운 문자열 연결을 해야만한다
//JDK11
private static void oldStyle(){
String text = "{n" +
" "name : "John Doe" ,n"+
" "age": 45,n" +
" "address" : "Doe Street, 23, Java Town"n" +
"}";
System.out.println(text);
}
- JDK17 에서는 새로운 문법 """"(큰따옴표 3개) 지원한다.
- '''' '''' 사이에 내가 보내고 싶은 데이터형식을 자유롭게 작성하고 보낼수 있다
//JDK17
private static void jsonBlock(){
String text = "''
{
"name : "John Doe" ,
"age": 45,
"address" : "Doe Street, 23, Java Town"
}
""";
System.out.println(text);
}
결과창
{
"name" : "John Doe",
"age" : 45,
"address" : "Doe Street,23, Java Town"
}
스위치 문법 개편
private static void oldStyleWithBreak(Fruit fruit) {
switch(fruit){
case APPLE, PEAR:
System.out.println("Common fruit");
case ORANGE, AVOCADO:
System.out.println("Exotic fruit");
default:
System.out.println("Undefined fruit");
}
}
- switch문에서 APPLE를 호출하면 다음과 같은 코드가 출력
Common fruit
Exotic fruit
Undefined fruit
- Swithc문에서 Berak를 안써줘서 모두 출력되었다
JDK18
//JDK18
private static void withSwitchExpression(Fruit fruit) {
switch(fruit){
case APPLE, PEAR ->System.out.println("Common fruit");
case ORANGE, AVOCADO -> System.out.println("Exotic fruit");
default -> System.out.println("Undefined fruit");
}
}
- break 를 람다식 (->)으로 변환하였다
- 여기서 System.out.println코드도 중복되니깐 생략 가능하다
//JDK18
private static void withReturnValue(Fruit fruit) {
switch(fruit){
case APPLE, PEAR ->"Common fruit";
case ORANGE, AVOCADO -> "Exotic fruit";
default ->"Undefined fruit";
}
}
- break와 sout의 중복을 피하고, 가독성이 좋은 코드 완성된다
- 다른 방법으로 작성 가능하다
//JDK18
private static void oldStyleWithYield(Fruit fruit) {
switch(fruit){
case APPLE, PEAR:
yield "Common fruit";
case ORANGE, AVOCADO:
yield "Exotic fruit";
default:
yield "Undefined fruit";
}
}
Stream.toList()의 간결화
private static void oldStyle() {
Stream<String> stringStream = Stream.of("a", "b", "c");
List<String> stringList = stringStream.collect(Collectors.toList());
for(String s : stringList){
System.out.println(s);
}
}
- Streamd 에서 자주 쓰이는 코드인 collect(Collectiors.toList()) 코드를 간결하게 바꿔었다.
- 이제 toList()로 간결하게 사용할 수 있도록 추가 되었다
private static void streamToList() {
Stream<String> stringStream = Stream.of("a", "b", "c");
List<String> stringList = stringStream.toList();
for(String s : stringList){
System.out.println(s);
}
}
NPE(NullPointerException)의 원인 제공
public static void main(String[] args) {
HashMap<String, GrapeClass> grapes = new HashMap<>();
grapes.put("grape1", new GrapeClass(Color.BLUE, 2));
grapes.put("grape2", new GrapeClass(Color.white, 4));
grapes.put("grape3", null);
var color = ((GrapeClass) grapes.get("grape3")).getColor();
}
- 코디 실행한다면, grape3에 없는 value(Null)를 참조하여 JDK11은 다음과 같은 에러가 뜬다
//JDK11
Exception in thread "main" java.lang.NullPointerException
at com.mydeveloperplanet.myjava17planet.HelpfulNullPointerExceptions.main(HelpfulNullPointerExceptions.java:13)
- JDK17 부터 원인 알려준다
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.mydeveloperplanet.myjava17planet.GrapeClass.getColor()" because the return value of "java.util.HashMap.get(Object)" is null
at com.mydeveloperplanet.myjava17planet.HelpfulNullPointerExceptions.main(HelpfulNullPointerExceptions.java:13)
출처
https://taehoung0102.tistory.com/217
'JAVA' 카테고리의 다른 글
[Java&JS]WebSocket 채팅 (0) | 2024.09.03 |
---|---|
Data 값 숫자로 변경된 경우 ex)1713925050000 수정 (0) | 2024.05.22 |
java Date 객체 이용한 당일 연월일 생성 (0) | 2024.05.11 |
SVN 설치 & 명령어 (0) | 2024.03.04 |
이클립스 export (내보내기),import(가져오기) (0) | 2024.02.17 |