Что означает шаблон c перед методом? - PullRequest
0 голосов
/ 12 января 2020

Я нашел функцию, которая в основном выглядит следующим образом:

<R> MyClass<R> functionName(){}

Я понятия не имею, что означает <R> прямо перед собой, и я не нашел ничего, прибегая к гуглу. Я знаю, что такое дженерики, я просто не знаю, что они делают в этом конкретном c месте.

Ответы [ 3 ]

1 голос
/ 13 января 2020

Первый - это своего рода объявление о том, что functionName будет использовать обобщенные значения, обычно мы используем R для представления «возврата», что означает, что эта функция будет возвращать экземпляр MyClass, который манипулирует объектами R.

Для лучшего понимания это способ вызова functionName, если он был установлен c:

public class AClass{

   class MyClass<TYPE>{}

   static <R> MyClass<R> functionName(){return null;}

   public static void main(String[] args) {
      AClass.<String>functionName();
   }

}
1 голос
/ 13 января 2020

Это позволит вам написать методы, которые могут выступать в качестве вспомогательных методов общего назначения для любого типа.

Вот пример обращения содержимого List к обратному и возврата его в ArrayList.

        List<String> liststr = new ArrayList<>(List.of("A","B","C"));
        List<String> reversed = reverse(liststr);
        System.out.println(reversed);

        List<Integer> listint = new ArrayList<>(List.of(1,2,3,4));
        List<Integer> reverseint = reverse(listint);
        System.out.println(reverseint);

А вот и метод.


    public static <T>  List<T> reverse(ArrayList<T> list) {
        List<T> rev = new ArrayList<>();
        for (int i = list.size()-1; i >= 0; i--) {
            rev.add(list.get(i));
        }
        return rev;
    }

Это можно было бы сделать по-другому, но для этого потребовалось бы casting возвращаемого значения и могло бы также сгенерировать runtime cast exception.

Как и во всех обобщенных c методах и классах, конфликты типов будут разрешаться на compile time, а не на runtime.

1 голос
/ 12 января 2020

Это означает, что R является переменной, которая присваивается при выполнении метода и может быть назначена любому классу. Это может помочь: Что такое Generics в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...