Печать всех переменных оценивает от класса

Я люблю ответ chaowman, но сделал бы одно изменение

int result = 17463.ToString().Sum(c => Convert.ToInt32(c));

, я даже не уверен c - '0', синтаксис работал бы? (substracting два символа должен дать символ в результате, я думаю?)

я думаю, что это - самая читаемая версия (использование суммы слова в сочетании с лямбда-выражением, показывающим, что Вы сделаете это для каждого символа). Но действительно, я не думаю, что это будет самым быстрым.

65
задан Community 23 May 2017 в 12:02
поделиться

3 ответа

Из Реализация toString :

public String toString() {
  StringBuilder result = new StringBuilder();
  String newLine = System.getProperty("line.separator");

  result.append( this.getClass().getName() );
  result.append( " Object {" );
  result.append(newLine);

  //determine fields declared in this class only (no fields of superclass)
  Field[] fields = this.getClass().getDeclaredFields();

  //print field names paired with their values
  for ( Field field : fields  ) {
    result.append("  ");
    try {
      result.append( field.getName() );
      result.append(": ");
      //requires access to private field:
      result.append( field.get(this) );
    } catch ( IllegalAccessException ex ) {
      System.out.println(ex);
    }
    result.append(newLine);
  }
  result.append("}");

  return result.toString();
}
92
ответ дан 24 November 2019 в 15:12
поделиться

Зачем вам изобретать велосипед, когда есть открытые исходные коды, которые уже неплохо справляются со своей задачей.

Оба apache common-langs и spring поддерживают очень гибкий шаблон компоновщика

Вот как вы делаете это рефлексивно для apache

@Override
public String toString()
{
  return ToStringBuilder.reflectionToString(this);
}

Вот как вы это делаете если вы хотите печатать только те поля, которые вам нужны.

@Override
public String toString() 
{
    return new ToStringBuilder(this)
      .append("name", name)
      .append("location", location)
      .append("address", address)
      .toString(); 
}

Вы можете даже "стилизовать" свой вывод на печать с помощью нестандартного ToStringStyle или даже настроить его в своем собственном стиле.

Я лично не пробовал spring ToStringCreator api, но выглядит очень похоже.

46
ответ дан 24 November 2019 в 15:12
поделиться

При доступе к значению поля передайте экземпляр, а не null.

Почему бы здесь не использовать генерацию кода? Eclipse, например, сгенерирует для вас реальную реализацию toString.

6
ответ дан 24 November 2019 в 15:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: