2016-05-30 2 views
-1

У меня проблема с разбором аргументов. У меня есть метод записи, который находится в WriteToFile класс как это:Как анализировать аргументы в другом классе?

public class WriteToFile { 

    public void write (String text){ 
     try{ 
      FileWriter writer = new FileWriter("output.txt",true); 
      BufferedWriter write = new BufferedWriter(writer); 

      write.write(text); 
      write.newLine(); 
      write.close(); 
     } 
     catch (Exception error){ 
      error.printStackTrace(); 
     } 
    } 

public class A { 

    WriteToFile write = new WriteToFile(); 
    write.write(something); 

} 

public class B { 

    WriteToFile write = new WriteToFile(); 
    write.write(something); 

} 

Нам нужно изменить «output.txt» к арг [1]. Обычно добавление еще одного аргумента в метод является решением, но допускает только 3 изменения кода строки. Я попытался добавить метод set, но написал метод, используемый несколькими классами, поэтому для его исправления требуется более трех строк. Я попытался расширить основной класс, чтобы попасть в область действия, не работал. Есть ли способ сделать это?

+1

Что вы подразумеваете под «но разрешено только 3 изменения кода строки»? –

+0

', но разрешено только 3 изменения кода строки' почему это так? –

+1

, добавляя его как дополнительный параметр, меняя 'output.txt' на параметр и передавая дополнительный параметр из main, кажется мне 3 строки кода для меня – SomeJavaGuy

ответ

1

1) создать новое общественное поле в WriteToFile класса (Filename)

2) от главного myWriter.fileName = args[1]

3) FileWriter writer = new FileWriter(fileName, true);

// никаких изменений в подписи метода не называют 100 раз

Редактировать

Если вы строите много примеров WriteToFile повсюду, а затем использовать статическое поле в Main

1) В Mainpublic static String fileName;

2) от главного Main.fileName = args[1]

3) FileWriter writer = new FileWriter(Main.fileName, true);

+0

Да, но многие классы используют этот метод и другие классы, кроме основного, я могу использовать переменную args [1]. Я ошибаюсь? –

+0

@ Emredağıstan Значение для fileName устанавливается в начале программы в 'main' с помощью args [1]. Если вы создаете множество экземпляров «WriteToFile» по всему месту, вы должны сохранить эту переменную в статическом поле в «Main» –

+0

Имеет смысл. Благодарю. –

1
public void write (String text, String filename) // 1 
{ 
    FileWriter writer = new FileWriter(filename,true); // 2 
    ... 

В основном, во время звонка.

new WriteToFile().write(text, args[1]); // 3 

Это точно 3 строки, как показано в комментариях.

4

Добавление параметра и использовать его при вызове метода будет принимать только три изменения:

// Change 1 - add a fileName parameter to the method 
public void write (String text, String fileName) { 
    try{ 
     FileWriter writer = new FileWriter(fileName, true); // Change 2 - use it 
     BufferedWriter write = new BufferedWriter(writer); 

     write.write(text); 
     write.newLine(); 
     write.close(); 
    } 
    catch (Exception error){ 
     error.printStackTrace(); 
    } 
} 

// Change 3 - in the main method that calls this one, pass args[1]: 
myWriter.write("someText", args[1]); 
+0

Что делать, если мы уже назвали этот метод примерно 100 раз в 1500 строк? –

+0

@ Emredağıstan вы можете поделиться своим методом, назвав это? Я боюсь, что нам понадобится еще один контекст, который поможет вам справиться с этой проблемой. – Mureinik

+0

@ Emredağıstan Если вызов несколько раз - проблема, почему бы просто не использовать Find and Replace? –

Смежные вопросы