0

당신은 다음과 같습니다 http://developer.android.com/reference/java/io/PrintStream.html#print%28float%29Java PrintStream이 print() 함수를 오버로드해야하는 이유는 무엇입니까? 여기

그냥 하나 개의 기능은 모든 목적을 이룰 수 :

public void print (Object o) { 
    if (o == null) { 
     // print "null" 
    } else { 
     // print o.toString(); 
    } 
} 

더 퇴고. 예를 들어, internal_print(String str)은 인쇄 스트림에 쓰는 함수입니다. 그런 다음 필요한 유일한 기능은 다음과 같습니다

public void print (float o) { 
    if (o == null) { 
     internal_print("null"); 
    } else { 
     internal_print(o.toString()); 
    } 
} 

public void print (int o) { 
    if (o == null) { 
     internal_print("null"); 
    } else { 
     internal_print(o.toString()); 
    } 
} 

public void print (char o) { 
    if (o == null) { 
     internal_print("null"); 
    } else { 
     internal_print(o.toString()); 
    } 
} 

public void print (long o) { 
    if (o == null) { 
     internal_print("null"); 
    } else { 
     internal_print(o.toString()); 
    } 
} 

... 

심지어 단지를 호출을 : 다른 float, int, char, long 등 오버로딩, 나는 그들이 단지처럼 상상할 수에 대한

public void print (Object o) { 
    if (o == null) { 
     internal_print("null"); 
    } else { 
     internal_print(o.toString()); 
    } 
} 

살인자 기능 print (Object o).

설명해 주시겠습니까? 많은 감사합니다 !!

+1

프리미티브는 'null'일 수 없으며'toString()'을 가지고 있지 않습니다! –

+0

Ooops 좋은 장소 (Y) 그게 내 잘못이고 오타. 그러나 함수 매개 변수에서'((Object) an_int) '로 형변환 된 후에는 null과 toString()을 검사 할 수 있습니다. – midnite

+0

프리미티브는 객체가 아닙니다. 객체로 사용할 수 없습니다. – MathSquared

답변

5

역사적인 이유 : 오토 복싱이 추가되기 훨씬 전에 (1.5에서) Java 1.0 이후로 PrintStream 클래스가 존재합니다.

자동 보세 화 (autoboxing)는 print(Object o)에 제식석 유형을 전달할 수있게합니다. 그것 없이는 PrintStream은 각 프리미티브 타입에 대해 과부하를 개별적으로 구현해야했습니다.

public void print (int o) { 
    print(String.valueOf(o)); 
} 

... 등 Integer.toString(int)Long.toString(long)와 같은 래퍼 클래스 내의 메소드에 String.valueOf(..) 기본적 대표 구현 : 그런데

는 원시 타입 print(..)의 구현은 더 같다. docjar에서 소스 코드를 읽을 수 있습니다.

+0

"autoboxing"은 ((Object) an_int)를 캐스팅하는 것을 의미합니까? – midnite

+1

Autoboxing은 객체처럼 처리해야 할 때 래퍼 객체에서'int'와 같은 기본 유형을 자동으로 "박스 처리"한다는 것을 의미합니다. http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html – Joni