Я пишу декомпилятор java. Чтобы дать выход хороший отступ, я решил написать класс под названием TabbedPrintWriter
, чтобы автоматически соответствующим образом отображать вывод. Вот код:Почему мой TabbedPrintWriter не работает?
import java.io.OutputStream;
import java.io.PrintWriter;
public class TabbedPrintWriter extends PrintWriter {
private static int indentAmount = 4;
private int indent = 0;
public TabbedPrintWriter(OutputStream out) {
super(out);
}
public TabbedPrintWriter(OutputStream out, boolean autoFlush) {
super(out, autoFlush);
}
@Override
public void println() {
super.println();
for (int i = 0; i <= indentAmount * indent; i++) {
super.write(' ');
}
}
public void indent() {
indent++;
}
public void unindent() {
indent--;
}
}
Я также написал тестовый класс, чтобы проверить это:
public class TabbedPrintWriterTest {
public static void main(String[] args) {
TabbedPrintWriter writer = new TabbedPrintWriter(System.out, true);
writer.println("Hello");
writer.indent();
writer.println("Goodbye");
}
}
Если вы посмотрите на код, каждый уровень отступа должно быть четыре пробела. Однако, если я запускаю это, я получаю этот вывод:
Hello
Goodbye
Да, это так. Только одно место.
Почему это?
Вы не являетесь основным критическим методом. Вы проверили API? Исходный код? Также не следует называть супер-метод * после * пробелами выписываться? И каков ваш план действий, если печать вызывается несколько раз, а затем println? Планируете ли вы сделать вкладку перед тем, как позвонить на метод 'print (...)'? –
@HovercraftFullOfEels удалить это. Ваш ответ уже прошел. Я читаю его. – tbodt
Я удалил свой ответ, так как он пахнет больше как комментарий. –