Как мне создать статическую ссылку на нестатический метод?

#java

#java

Вопрос:

 import java.util.Iterator;
import java.util.ArrayList;
import java.util.Arrays;

class Main {
  public static void main(String[] args) {
    ArrayList<String> original = new ArrayList<>(Arrays.asList("afd", "asdf", "aavdd", "sajf", "adnf", "afd", "fjfn"));
    String find = "afd";
    String replaceWith = "asd";
    System.out.println(replaceIt(original, find, replaceWith));

  }
  public ArrayList<String> replaceIt(ArrayList<String> original, String find, String replaceWith){
      ArrayList<String> newList = new ArrayList<String>();
      for(int y = 0; y<original.size(); i  ){
        if(!original.get(y).equals(find))
          newList.set(y, original.get(y));
        newList.set(y, replaceWith);
      }
      
      original = newList;
      return original;
  }
}
  

Как мне вызвать метод replaceIt? Я в замешательстве, и мне нужно сделать так, чтобы он печатал выходные данные этой функции. Я так запутался, кто-нибудь, пожалуйста, помогите.

Комментарии:

1. Просто сделайте метод статическим, добавьте к методу ключевое слово static

2. методы экземпляра принадлежат объектам, а статический метод принадлежит классу.

Ответ №1:

  • public ArrayList<String> replaceIt() это метод экземпляра, он вызывается только из Main экземпляров / объектов.
  • public static void main это статический метод класса Main , статические методы не могут напрямую обращаться к методам экземпляра и переменным экземпляра.

Для этого, чтобы вызвать replaceIt() метод из статического основного метода, сделайте replaceIt() static.

 public static ArrayList<String> replaceIt(/*arguments*/){
    //your code goes here
}
  

Ответ №2:

Наличие нестатического метода в Main немного странно. Это не похоже на то, что вы собираетесь создавать новые экземпляры Main (скажем, так же, как вы бы создавали новые экземпляры Person класса).

Эти типы универсальных функций помощников / утилит обычно входят в какой-то Utils.java или Helpers.java класс и объявляются как статические в этих файлах. Таким образом, вы сможете вызывать: Utils.replaceIt(original, find, replaceWith));

Ответ №3:

Поскольку replaceIt() является методом экземпляра, вам просто нужно создать экземпляр основного класса для его вызова —

 public static void main(String[] args) {  
    ...  
    Main m = new Main();  
    System.out.println(m.replaceIt(original, find, replaceWith));  
}