Java:使用printstream的奇怪输出,为什么toString没有转换?

时间:2015-01-03 20:48:09

标签: java tostring object-to-string

在对象上使用toString时,我没有得到我期望的结果。 (我继承了代码)。

目标是在txt文件上打印一个人的FiscalCode

这是我的目标:

public class DatiPersonaFisica extends DatiPersona {

private String nome;
private String cognome;
private CodiceFiscale CF;
private String cell;
private Indirizzo domicilio;
}

这是我创建和打印文件的方法:

public class LoggerPersone  {

public static void Logger(DatiPersonaFisica p) throws FileNotFoundException{
FileOutputStream fs = new FileOutputStream("logPersoneFisicheInserite.txt",true);
PrintStream scrivi = new PrintStream(fs);
CodiceFiscale codfisc = p.getCF();
codfisc.toString();
scrivi.println(codfisc);
scrivi.close(); 
}

所有似乎工作正常,但输出是:

data_view.CodiceFiscale@43ee5528 

这不是财政代码。

2 个答案:

答案 0 :(得分:3)

问题是,类CodiceFiscale不会覆盖对象的public String toString()方法,因此您将看到从对象的默认方法返回的字符串。

相反,如果可能,请考虑自己覆盖方法,或者打印出CodiceFiscale对象的不同字段。如果您不想直接修改CodiceFiscale,请考虑扩展它,并为您的子类提供一个体面的toString()方法,即返回重要信息的方法。您可能需要使用" 包装"为此目的的课程。

话虽如此,我认为通常不建议以这种方式在生产代码中使用toString()。该方法对于调试目的而言是最有用和最安全的。另一种方法是创建一个静态实用程序方法,该方法从传入的CodiceFiscale对象中提取所有需要的信息,并返回一个感兴趣的String。

答案 1 :(得分:1)

您应该考虑添加一个“getValue”方法,该方法返回您要放入文件的内容,而不是依赖于toString()。转到CodiceFiscale类源并添加如下内容:

public String getFiscalCode() {
  return <string for fiscal code>
}