2014-01-29 3 views
0

У меня есть класс, и в классе у меня есть три метода, которые делают то же самое, но предоставляют разные входы. Поэтому мне было интересно, есть ли способ сделать это названным меньшим.Есть ли способ сделать этот java меньшим?

Мой код;

import javax.swing.JFileChooser; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 
import javax.swing.filechooser.FileNameExtensionFilter; 

public class test { 

    public void methodclassA() { 

     int result = JOptionPane 
       .showOptionDialog(
         null, 
         "How would you like you insert your data, manually or from a file? ", 
         "Inserting data", JOptionPane.YES_NO_OPTION, 
         JOptionPane.QUESTION_MESSAGE, null, new String[] { 
           "Manual", "From a File" }, 
         JOptionPane.NO_OPTION); 
     if (result == JOptionPane.YES_OPTION) { 

      // Going to call methodA from another class 
     } 

     if (result == JOptionPane.NO_OPTION) { 

      JTextField NameField = new JTextField(); 
      Object[] message = { "Path location:", NameField }; 

      int result2 = JOptionPane.showOptionDialog(null, message, 
        "Inserting data", JOptionPane.YES_NO_OPTION, 
        JOptionPane.QUESTION_MESSAGE, null, new String[] { "Ok", 
          "Locate the file" }, JOptionPane.NO_OPTION); 
     } 
    } 

    public void methodclassB() { 

     int result = JOptionPane 
       .showOptionDialog(
         null, 
         "How would you like you insert your data, manually or from a file? ", 
         "Inserting data", JOptionPane.YES_NO_OPTION, 
         JOptionPane.QUESTION_MESSAGE, null, new String[] { 
           "Manual", "From a File" }, 
         JOptionPane.NO_OPTION); 
     if (result == JOptionPane.YES_OPTION) { 

      // Going to call methodB from another class 
     } 

     if (result == JOptionPane.NO_OPTION) { 

      JTextField NameField = new JTextField(); 
      Object[] message = { "Path location:", NameField }; 

      int result2 = JOptionPane.showOptionDialog(null, message, 
        "Inserting data", JOptionPane.YES_NO_OPTION, 
        JOptionPane.QUESTION_MESSAGE, null, new String[] { "Ok", 
          "Locate the file" }, JOptionPane.NO_OPTION); 
     } 
    } 

    public void methodclassC() { 

     int result = JOptionPane 
       .showOptionDialog(
         null, 
         "How would you like you insert your data, manually or from a file? ", 
         "Inserting data", JOptionPane.YES_NO_OPTION, 
         JOptionPane.QUESTION_MESSAGE, null, new String[] { 
           "Manual", "From a File" }, 
         JOptionPane.NO_OPTION); 
     if (result == JOptionPane.YES_OPTION) { 

      // Going to call methodB from another class 
     } 

     if (result == JOptionPane.NO_OPTION) { 

      JTextField NameField = new JTextField(); 
      Object[] message = { "Path location:", NameField }; 

      int result2 = JOptionPane.showOptionDialog(null, message, 
        "Inserting data", JOptionPane.YES_NO_OPTION, 
        JOptionPane.QUESTION_MESSAGE, null, new String[] { "Ok", 
          "Locate the file" }, JOptionPane.NO_OPTION); 
     } 
    } 

} 

Например, мои три метода в классе: methodclassA, methodclassB, methodclassC, все они запрашивают у пользователя один и тот же ввод, но каждый метод будет вызывать другой метод из другого класса.

Спасибо заранее, и я надеюсь, что я четко объяснил.

Редактировать: Я забыл упомянуть об этом раньше, у меня есть три кнопки в моем основном классе, который вызывает каждый из этих трех методов. например, моя кнопкаA вызывает метод classA, buttonB вызывает методclassB, а buttonC вызывает метод classCassC.

+0

не могли бы вы отформатировать свой код первым? – alex

+0

Отформатирован код – user3248466

ответ

3

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

public void methodCaller(char aSwitcher) { 
     int result = JOptionPane.showOptionDialog(null, "How would you like you insert your data, manually or from a file? ", "Inserting data", 
       JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { "Manual", "From a File" }, JOptionPane.NO_OPTION); 
     if (result == JOptionPane.YES_OPTION) { 
      switch(aSwitcher) 
      { 
       case 'A': 
        //Going to call methodA from another class 
        break; 
       case 'B': 
        //Going to call methodB from another class 
        break; 
       case 'C': 
        //Going to call methodC from another class 
        break; 
       default: 
        throw new IllegalArgumentExcpetion("No method defined for option" + aSwitcher); 
      } 


     } 
     else if (result == JOptionPane.NO_OPTION) { 
      JTextField NameField = new JTextField(); 
      Object[] message = {"Path location:", NameField}; 
      int result2 = JOptionPane.showOptionDialog(null, message, "Inserting data", 
        JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] { "Ok", "Locate the file" }, JOptionPane.NO_OPTION); 
     } 
} 

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

Тогда называть просто сделать эти замены

methodclassA(); -> methodCaller('A'); 
methodclassB(); -> methodCaller('B'); 
methodclassC(); -> methodCaller('C'); 

Также преимуществом является то, что вы можете добавить «D», «E», «F» и все, что вам нужно изменить, чтобы добавить эти случаи в выключатель.

+0

Привет, я забыл упомянуть, прежде чем у меня есть три кнопки в моем основном классе, который вызывает каждый из этих трех методов. Это повлияет на поведение кода, который вы предоставили? – user3248466

+0

Затем вы можете создать новую функцию, например, @JavaDevil, а затем вызвать ее из трех методов с помощью этой опции. – Trenin

+0

@ user3248466 Нет, см. Мое редактирование изменений в вызове необходимых методов. –

0

Я знаю, что сейчас они все в одном классе, но в зависимости от того, как они называются, вы можете реорганизовать и использовать Template Method Design Pattern.

+0

Привет, я действительно смущен сейчас. В принципе, у меня есть три кнопки в моем основном классе. buttonA, buttonB и buttonC. кнопкаA call методA, кнопкаB вызывает методB и кнопкаC call methodC. Но я понятия не имею, как я предполагаю сделать это с предложением java devil, которое мне нравится и легче понять. – user3248466

+0

Вы видите редактирование, добавленное @JavaDevil? – mdewitt

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