Java공부하는데 진짜 힘드네요... 저거 뜨면 뭐가 잘못된건지 찾기 힘들어요ㅠㅠ
제 경험상 초보분들이 널포인터를 잡기 어려워 하는 이유는..
aaa.getA().getB().getC().task();
요런식으로 길게 이어서 쓰는것을 메소드 체이닝이라고 합니다. 요렇게 코딩하시면 널포인터 떴을때 오류잡기 힘들어요
A a = aaa.getA()
B b = a.getB()
C c = b.getC()
c.task()
이렇게 다 풀어쓰시면 몇번라인에서 오류났는지 찾기 쉬울 뿐더러 중간에 print문 하나 껴서 쉽게 디버깅 할 수 있습니다.
널포인터를 미연에 방지하는 방법은 버킷 API 끌어다 쓸때 그 함수가 null을 반환할 가능성이 있는지(nullable한지) API문서에서 확인하고 if문으로 처리해주는 방법이 가장 깔끔합니다.
아니면 java optional이라고 객체를 한번 더 감싸서 null을 깔끔쓰하게 처리하는 방법이 있으니 한번 찾아서 공부해보세요
음.. 저는 다른 경우였는데 나중에 또 오류나면 참고해볼게요 감사합니다!
Java를 자주 사용하지는 않습니다만.. 팁을 드리자면..
1. 메소드 체이닝 사용 자제하기
o.funcA().funcB(); 말고
A a = o.funcA(); B b = a.funcB(); 사용.
2. 의미없는 null 파라미터 전달하지 않기
3. null 여부 확인 로직 추가하기
nullable 한 함수일 경우 가능하면 체크하는게 좋겠죠?
String A = null; if(a != null){ exec(); }
4. 문자열 비교는 non-null 기준의 equals 사용하기
if(a == "hello"){} 는 당연히 아니고
if(a.equals("hello"){} 도 말고
if("hello".equals(a)){} 로 사용.
5. toString 보다는 valueOf 사용하기
a.toString() 사용시 a 가 null 이라면 NPE 발생.
String.valueOf(a) 사용하면 NPE 미발생.
사실 뜨는게 더 나을수도 있습니다 뭔가 문제는 있는데 오류도 딱히 안뜨면 많이 곤란하죠
?! 맞아요 안뜨다가 중간에 뜨면..;
건축
KHC
2024-10-25
2
2024-10-10
dbasd12
2024-10-09
레드스톤
노트블럭전문가
2024-10-08
1
팁
물귀신
2024-10-06
3
camelCase
2020.01.19제 경험상 초보분들이 널포인터를 잡기 어려워 하는 이유는..
aaa.getA().getB().getC().task();
요런식으로 길게 이어서 쓰는것을 메소드 체이닝이라고 합니다. 요렇게 코딩하시면 널포인터 떴을때 오류잡기 힘들어요
A a = aaa.getA()
B b = a.getB()
C c = b.getC()
c.task()
이렇게 다 풀어쓰시면 몇번라인에서 오류났는지 찾기 쉬울 뿐더러 중간에 print문 하나 껴서 쉽게 디버깅 할 수 있습니다.
널포인터를 미연에 방지하는 방법은 버킷 API 끌어다 쓸때 그 함수가 null을 반환할 가능성이 있는지(nullable한지) API문서에서 확인하고 if문으로 처리해주는 방법이 가장 깔끔합니다.
아니면 java optional이라고 객체를 한번 더 감싸서 null을 깔끔쓰하게 처리하는 방법이 있으니 한번 찾아서 공부해보세요
배고픈상어-효묘
2020.01.19음.. 저는 다른 경우였는데 나중에 또 오류나면 참고해볼게요 감사합니다!
네모
2020.01.20Java를 자주 사용하지는 않습니다만.. 팁을 드리자면..
1. 메소드 체이닝 사용 자제하기
o.funcA().funcB(); 말고
A a = o.funcA(); B b = a.funcB(); 사용.
2. 의미없는 null 파라미터 전달하지 않기
3. null 여부 확인 로직 추가하기
nullable 한 함수일 경우 가능하면 체크하는게 좋겠죠?
String A = null; if(a != null){ exec(); }
4. 문자열 비교는 non-null 기준의 equals 사용하기
if(a == "hello"){} 는 당연히 아니고
if(a.equals("hello"){} 도 말고
if("hello".equals(a)){} 로 사용.
5. toString 보다는 valueOf 사용하기
a.toString() 사용시 a 가 null 이라면 NPE 발생.
String.valueOf(a) 사용하면 NPE 미발생.
wysohn
2020.01.20사실 뜨는게 더 나을수도 있습니다 뭔가 문제는 있는데 오류도 딱히 안뜨면 많이 곤란하죠
윈초
2020.02.12?! 맞아요 안뜨다가 중간에 뜨면..;