|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
public interface Formattable
Formattable 인터페이스를 구현할 필요가 있는 것은,Formatter 의 's' 변환 지시자를 사용해 커스텀 서식을 설정할 필요가 있는 클래스입니다. 이 인터페이스는, 임의의 객체를 서식 설정하기 위한 기본 컨트롤로서 사용할 수 있습니다.
예를 들어, 다음의 클래스는, 플래그 및 길이 제한에 근거해 유명 주식의 다양한 표현을 출력합니다.
import java.nio.CharBuffer;
import java.util.Formatter;
import java.util.Formattable;
import java.util.Locale;
import static java.util.FormattableFlags. *;
...
public class StockName implements Formattable {
private String symbol, companyName, frenchCompanyName;
public StockName(String symbol, String companyName,
String frenchCompanyName) {
...
}
...
public void formatTo(Formatter fmt, int f, int width, int precision) {
StringBuilder sb = new StringBuilder();
// decide form of name
String name = companyName;
if (fmt.locale(). equals(Locale.FRANCE))
name = frenchCompanyName;
boolean alternate = (f & ALTERNATE) == ALTERNATE;
boolean usesymbol = alternate || (precision ! = -1 && precision < 10);
String out = (usesymbol ? symbol : name);
// apply precision
if (precision == -1 || out.length() < precision) {
// write it all
sb.append(out);
} else {
sb.append(out.substring(0, precision - 1)). append('*');
}
// apply width and justification
int len = sb.length();
if (len < width)
for (int i = 0; i < width - len; i++)
if ((f & LEFT_JUSTIFY) == LEFT_JUSTIFY)
sb.append(' ');
else
sb.insert(0, ' ');
fmt.format(sb.toString());
}
public String toString() {
return String.format("%s - %s", symbol, companyName);
}
}
Formatter 와 병용 하는 경우, 전술의 클래스는 다음의 다양한 서식 캐릭터 라인을 출력합니다.
Formatter fmt = new Formatter();
StockName sn = new StockName("HUGE", "Huge Fruit, Inc. ",
"Fruit Titanesque, Inc. ");
fmt.format("%s", sn); // -> "Huge Fruit, Inc. "
fmt.format("%s", sn.toString()); // -> "HUGE - Huge Fruit, Inc. "
fmt.format("%#s", sn); // -> "HUGE"
fmt.format("%-10. 8s", sn); // -> "HUGE "
fmt.format("%. 12s", sn); // -> "Huge Fruit,*"
fmt.format(Locale.FRANCE, "%25s", sn); // -> " Fruit Titanesque, Inc. "
multi-thread 액세스를 실행하는 경우, Formattable 는 반드시 안전하지는 않습니다. thread의 안전성은, 이 인터페이스를 확장 및 구현하는 클래스에 의해 옵션으로 보증됩니다.
특히 지정되어 있지 않은 한, 이 클래스의 인터페이스내의 메소드에 null 인수를 건네주면(자),NullPointerException 가 throw 됩니다.
| 메소드의 개요 | |
|---|---|
void |
formatTo (Formatter formatter,
int flags,
int width,
int precision)
지정된 포매터 를 사용해 객체의 서식을 설정합니다. |
| 메소드의 상세 |
|---|
void formatTo(Formatter formatter,
int flags,
int width,
int precision)
포매터 를 사용해 객체의 서식을 설정합니다.
formatter - 포매터 . 클래스의 구현에 의해 formatter.out() 또는 formatter.locale() 가 불려 가 이 formatter 로 사용되는 Appendable 또는 Locale 가 각각 취득되는flags - 플래그에 의해 출력 서식이 변경된다. 값은 비트 마스크로서 해석된다.
플래그 FormattableFlags.LEFT_JUSTIFY ,FormattableFlags.UPPERCASE , 및 FormattableFlags.ALTERNATE 를 임의에 조합해 설정할 수 있다. 플래그가 설정되어 있지 않은 경우, 구현하는 클래스의 디폴트 서식이 적용되는width - 출력에 기입해지는 최소 문자수. 변환 후의 값의 길이가 width 보다 작은 경우, 총문자수가 width 에 동일해질 때까지 출력에 ' ' 가 패딩 된다. 디폴트에서는, 패딩은 선두에 대해서 행해진다. FormattalbeFlags#LEFT_JUSTIFY 플래그가 설정되었을 경우, 패딩은 끝에 대해서 행해진다.
width 가 -1 의 경우, 최소치는 존재하지 않는precision - 출력에 기입해지는 최대 문자수. precision 는 width 의 전에 적용되기 (위해)때문에,width 의 값이 precision 보다 큰 경우에서도, 출력은 precision 로 지정된 문자수에 절약할 수 있다. precision 가 -1 의 경우, 문자수에 명시적인 제한은 존재하지 않는다
IllegalFormatException - 어느 파라미터도 부정한 경우. 가능성이 있는 서식 에러 모든 자세한 것은, formatter 클래스 스펙의「상세」섹션을 참조
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.