繁体   English   中英

在Java中是否有用于将Object转换为String的标准接口?

[英]Are there any standard interface for converting Object to String in Java?

在Java中模拟lambda非常有用,但是目前你必须实现实现某些接口的就地类...

例如, join函数可能会获得Stringator接口,因此无论包含的对象如何,都可以加入任何ListCollection

interface Stringator<T> { String toString(T t); }

public static <T> String join(Collection<T> col, String delim, Stringator<T> s) {
    StringBuilder sb = new StringBuilder();
    Iterator<T> iter = col.iterator();
    if (iter.hasNext())
        sb.append(s.toString(iter.next()));
    while (iter.hasNext()) {
        sb.append(delim);
        sb.append(s.toString(iter.next()));
    }
    return sb.toString();
}

我不知道任何标准的StringatorToStringer接口......

join实现可以简化bean操作。 例如,获取书籍清单:

List<Book> books = ...;
String list =
  join(books, ", ", new Stringator<Book>{ toString(Book b) {return b.getName();} });

注意,使用标准toString的建议违反了Java约定: toString用于调试(查找JavaDoc和Java lang规范)!

UPDATE Java已经有了在其他方向工作的接口 - PropertyEditor 它的每个实现都可以从String构造Object 我从Object寻找String ...

更新2 很多人认为我错误地避免使用toString 这来自Java 7 Lang Spec(第6.1节):

A method that converts its object to a particular format F should be named
toF. Examples are the method toString of class Object and the methods
toLocaleString and toGMTString of class java.util.Date.

因此,如果我有Book对象, toString自然必须返回ISBN,但是如果我需要加入书名? 这就是为什么toString不那么好, java.text.Format.format或其他看起来更自然。

覆盖toString() ,它不违反任何java约定,实际上是一种推荐的做法。

返回对象的字符串表示形式。 通常,toString方法返回一个“文本表示”此对象的字符串。 结果应该是一个简洁但信息丰富的表示,便于人们阅读。 建议所有子类都重写此方法

http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#toString%28%29

在std java中没有ToStringer或类似的接口,你可以定义自己的,并使用

String stringValue()

这类似于intValue()longValue()等,常用于java

java.text.Format.format但它不是很好,是抽象类。

Java SE 8可能有一个functor接口,用于在两个任意类型之间进行转换,其中一个类型可能是String

覆盖toString()没有问题,除了这只是一种将对象表示为字符串的方法。 我认为ganvenkoa建议的东西可以让你轻松地以自定义的方式表达它。 想象一下,如果您正在处理其toString()返回John SmithCustomer对象,但是当您使用join(...)一群客户时,您希望将客户表达为Smith, John

我用过这类东西的一件事是com.google.common.collect.Iterables.transform(Iterable) (它又使用一个Function )这样的实用程序,并将其结果传递给com.google.common.base.Joiner.join(Iterable) 我希望Java 8会变得更优雅

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM