1) Objects.requireNonNull(T), Objects.requireNonNull(T, String)
#. 아래 Person 객체 생성시 newLastName이나 newFirstName에 null이 들어갈 경우 NullPointerException 발생.
#. Not Null임을 보장하고 있으므로 해당 Property를 사용할 때 Null 검사를 생략할 수 있음.
public class Person { private String lastName; private String firstName; public Person(final String newLastName, final String newFirstName) { this.lastName = Objects.requireNonNull(newLastName, "Last name cannot be null."); this.firstName = Objects.requireNonNull(newFirstName, "First name cannot be null."); } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } }
2) Objects.toString(Object), Objects.toString(Object, String)
#. 인자가 하나인 메소드는 전달받은 Object가 Not null인 경우 Object의 toString() 결과를 리턴하며, null인 경우 "null"을 리턴한다.
#. 인자가 둘인 메소드는 전달받은 Object가 Not null인 경우 Object의 toString() 결과를 리턴하며, null인 경우 전발받은 String 메시지를 리턴한다.
#. toString() 메소드를 Override할 때 Null 체크를 별도로 하지 않아도 되는 편리함이 있다.
public class Bar { private Foo foo; private Bar parent; @Override public String toString(){ return "Bar {foo = " + (foo == null ? "null" : foo.toString()) + ", parent = " + (parent == null ? "o parent, orphan" : parent.toString()) + "}"; } }위 코드를 아래와 같이 수정할 수 있다.
public class Bar { private Foo foo; private Bar parent; @Override public String toString(){ return "Bar {foo = " + Objects.toString(foo) + ", parent = " + Objects.toString(parent, "no parent, orphan") + "}"; } }소스출처
3) Objects.hash(Object...), Objects.hashCode(Object)
#. Objects.hash(Object...) : 입력받은 모든 Object들에 대한 HashCode를 리턴한다.
#. Objects.hashCode(Object) : Object가 null이면 "0"을 리턴, 그렇지 않으면 Object.hashCode()를 리턴한다.
public class Bar { private Foo foo; private Bar parent; @Override public int hashCode(){ int result = 17; result = 31 * result + (foo == null ? 0 : foo.hashCode()); result = 31 * result + (parent == null ? 0 : parent.hashCode()); return result; } }위 코드를 아래와 같이 수정할 수 있다.
public class Bar { private Foo foo; private Bar parent; @Override public int hashCode(){ return Objects.hash(foo, parent); } }소스출처
4) Objects.equals(Object,Object), Objects.deepEquals(Object,Object)
#. Objects.equals(Object,Object) : 두 입력값이 null이면 true를 null이 아니면 Object.equal(Object) 결과를 리턴한다.
#. Objects.deepEquals(Object,Object) : 두 입력값이 Arrays Type인 것을 제외하고는 Objects.equals() 메소드와 동일하다.
public class Bar { private Foo foo; private Bar parent; @Override public boolean equals(Object obj){ if (obj == this) { return true; } if (obj instanceof Bar) { Bar other = (Bar) obj; if (foo != other.foo) { if (foo == null || !foo.equals(other.foo)) { return false; } } if (parent != other.parent) { if (parent == null || !parent.equals(other.parent)) { return false; } } return true; } return false; } }위 소스를 아래와 같이 변경할 수 있다.
public class Bar { private Foo foo; private Bar parent; @Override public boolean equals(Object obj){ if (obj == this) { return true; } if (obj instanceof Bar) { Bar other = (Bar) obj; return Objects.equals(foo, other.foo) && Objects.equals(parent, other.parent); } return false; } }소스출처
5) Objects.compare(T,T,Comparator c) : 입력받은 두 값이 null인 경우에도 정상동작하며, true를 리턴해준다. null이 아닌 경우에는 c.compare(T, T) 결과를 리턴한다.
■ Collections class에 아래 3개의 method 추가 : Iterator를 만들 때 Null인 경우 아래의 Method를 사용할 경우 Null 처리가 간편해짐
1) Collections.emptyIterator
2) Collections.emptyEnumeration
3) Collections.emptyListIterator
import java.util.Collections; import java.util.Iterator; public class Main { public static void main(String[] args) { } public static Iterator getMy(){ String nullFlag = null; if(nullFlag == null){ return Collections.emptyIterator(); } return null; } }소스출처
참고자료 Post
계속...
정리하기 전에 링크부터
http://www.rapidprogramming.com/technology/differences-between-java-16-java-17-jdk-16-jdk-17-934
http://radar.oreilly.com/2011/09/java7-features.html
http://marxsoftware.blogspot.kr/2011/03/jdk-7-new-interfaces-classes-enums-and.html
http://eclipse.or.kr/wiki/Java_1.7c
http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html
http://en.wikipedia.org/wiki/Java_version_history#Java_SE_7_.28July_28.2C_2011.29
0 Comments:
댓글 쓰기