BeanのカスタムtoString()
実装を検討してください。
@Override
public String toString() {
String.format("this is %s", this.someField);
}
someField
がnullの場合、これによりthis is null
が生成されます。
明示的にreplaceAll(...)
を呼び出さずに、別のテキスト、つまり?
へのnull値引数のデフォルトのnull
文字列表現をオーバーライドする方法はありますかtoString
メソッドで?
注:Beanは、Formattable
を実装できるスーパークラスから継承します( http://docs.Oracle.com/ javase/7/docs/api/Java/util/Formattable.html )しかし、私はこの作業を行う方法を理解していないようです。
[〜#〜] edit [〜#〜]:スニペットは例のために単純化されていますが、三項演算子を探していませんソリューションsomeField==null ? "?" : someField
理由:
toString()
に関与するフィールドが非常に多い可能性があるため、すべてのフィールドをチェックするのは面倒で流andではありません。むしろ、Formattable
インターフェイスを使用するか、カスタムFormatter
(final
btwです)を使用して何かを行うことができますか?
Java 8を使用すると、これに対してOptionalクラスを使用できます。
import static Java.util.Optional.ofNullable;
...
String myString = null;
System.out.printf("myString: %s",
ofNullable(myString).orElse("Not found")
);
私の意見では、最も良い解決策は、グアバのオブジェクトメソッドであるfirstNonNullを使用することです。次のメソッドは、someFieldがnullの場合に空の文字列を出力することを保証します。
String.format("this is %s", MoreObjects.firstNonNull(this.someField, ""));
外部ライブラリを必要としないJava 7ソリューションの場合:
String.format("this is %s", Objects.toString(this.someField, "?"));
replaceAll()
を使用したくない場合は、someField
にデフォルトのtext(String)を割り当てることができます。
ただし、しばらくすると、null
が再び割り当てられる可能性があります。その場合、検証を使用できます
this.someField == null ? "defaultText" : this.someField
この件については少し遅れていますが、これは非常にきれいなソリューションになる可能性があります。まず、独自のフォーマットメソッドを作成します...
private static String NULL_STRING = "?";
private static String formatNull(String str, Object... args){
for(int i = 0; i < args.length; i++){
if(args[i] == null){
args[i] = NULL_STRING;
}
}
return String.format(str, args);
}
その後、意のままに使用してください...
@Test
public void TestNullFormat(){
Object ob1 = null;
Object ob2 = "a test";
String str = formatNull("this is %s", ob1);
assertEquals("this is ?", str);
str = formatNull("this is %s", ob2);
assertEquals("this is a test", str);
}
これにより、複数の読みにくい三項演算子が不要になります。
三項演算子の繰り返しを避けるために、オブジェクトがnull
であるかどうかをチェックし、trueの場合はデフォルト値を返す、より読みやすいメソッドでラップすることができます。
static <T> T changeNull(T arg, T defaultValue) {
return arg == null ? defaultValue : arg;
}
使用法
String field = null;
Integer id = null;
System.out.printf("field is %s %n", changeNull(field, ""));
System.out.printf("id is %d %n", changeNull(id, -1));
System.out.printf("id is %s %n", changeNull(field, ""));
出力:
field is
id is -1
id is
あなたはただできる
String.format("this is %s", (this.someField==null?"DEFAULT":this.someField));
Java 7)から、Objects.toString(Object o, String nullDefault)
を使用できます。
あなたの例に適用:String.format("this is %s", Objects.toString(this.someField, "?"));
someField
の元の値を保持するには(nullが有効な値である場合)、 三項演算子 を使用できます。
String.format("This is %s", (this.someField == null ? "unknown" : this.someField));
public static String format(String format, Object... args){
for (int i=0;i<args.length;i++){
if (args[i]==null) args[i]="";
}
return String.format(format,args);
}
その後、メソッドを使用します、ok