Java function inside function

Функция внутри функции в Java

код функции 2 появляется три раза в fun1 в моем коде (это большая функция для сопоставления биржевых заказов (мое школьное задание)) и использует много локальных переменных fun1.

так в чем проблема с двумя не вложенными методами? Затем просто вызывайте function2 столько раз, сколько вы хотите внутри function1

В Java просто нет такого понятия как функция. Существуют только объекты и методы, которые полностью принадлежат объектам и подчиняются им. Объект ваш господин и хозяин в Java, ничего не происходит, кроме как по его воле.

@Hunter, если я определю fun2 вне fun1, он не сможет изменять переменные fun1. когда я компилирую это выдаст ошибку, которая не может найти символ

Можно сказать, что Java представляет даже определение класса как просто еще один тип объекта для программиста 🙂

2 ответа

Вы не можете (и в Java они называются методами).

Однако вы можете определить анонимный класс внутри метода и вызвать его методы.

На мой взгляд, есть разница между методами и функциями, в то время как функции живут сами по себе, методы связаны с классом или объектом.

Разъяснение полезно, так как все документы Java используют это понятие. Жесткий (или кто-либо еще) найдет ответ на будущие вопросы о методах проще с правильным именованием.

Причина, по которой вы не можете сделать этого, состоит в том, что функции должны быть приложены к классу. В отличие от JavaScript и подобных языков, функции не являются типом данных. Есть движение, чтобы превратить их в один, чтобы поддерживать закрытие в Java (надеюсь, в Java 8), но с Java 6 и 7 он не поддерживается. Если вы хотите сделать что-то подобное, вы можете сделать это:

interface MyFun < void fun2(); >public static boolean fun1() < MyFun fun2 = new MyFun() < public void fun2() < //. >>; fun2.fun2(); return returnValue; > 

Ещё вопросы

  • 0 Ошибка компоновщика с шаблонным классом
  • 0 JS не работает на ПК, но работает на JSFIddle
  • 0 скольжение переполняется, пока слайд и слайд используются постоянно
  • 1 TFS Changeset несколькими пользователями
  • 0 Автоматическая проблема с перенаправлением в iframe
  • 0 Передача переменной из .htaccess на страницу PHP
  • 0 Python утилизация данных с неправильной HTML-структурой
  • 1 Как загрузить открытый набор данных s3 в коллаборацию Google?
  • 0 Как вывести результат $ last ngRepeat из href?
  • 0 Использование CASE в Mysql для установки значения в поле Alias
  • 1 Как автоматически обновить экран графического интерфейса в Java, после того, как обновление происходит в сохраненном файле?
  • 0 Как я могу поделиться переменными между представлениями, с тем же контроллером в AngularJS?
  • 1 как получить значения строки, когда флажок установлен в gridview
  • 1 Почему TextView не может отображать форматированный текст, ссылающийся на ресурсы Android?
  • 0 Выполнение запроса MySQL с использованием Python MySQL?
  • 0 PHP Regexp для получения переменной = «значение» из строки
  • 1 Альтернативное кодирование относительно isConnectingOrConnecting?
  • 0 Как мне иметь более одной переменной?
  • 0 Вызовите C ++ на стороне сервера с веб-страницы
  • 1 Второй цикл не выполняется
  • 1 Полный список цветов Excel с xlsxwriter
  • 1 На уровне модели, это хорошая идея для составления типов с идентификаторами, в отличие от прямых ссылок?
  • 1 Изменить текст на жирный или добавить изображения с помощью Google Script
  • 0 Как изменить опцию выбора выпадающего списка при onclick ()?
  • 1 Office 365 надстройка Javascript — синтез речи
  • 1 Возникли проблемы с этим методом, ошибка компиляции
  • 1 регулярное выражение совпадение строки с шаблоном
  • 1 Кнопки Python Tkinter numpad и несколько входов
  • 0 Как мне сделать конструктор, который принимает любой примитивный тип и преобразует в int в c ++?
  • 0 Как извлечь только определенную дату-время из веб-ответа и сопоставить его с данной датой-временем?
  • 0 Я не могу получить доступ к определенным ресурсам (параметры URL) Java
  • 0 MySQL JSON_SEARCH — не работает с двойными кавычками
  • 1 Доступ к кодам категорий для объектов Index в Pandas
  • 0 Как изменить строки со столбцами в матрице с одинаковой шириной?
  • 1 Ошибка распознавания токена в: ‘#i’ при разборе грамматики c
  • 0 Горизонтальная страница контента Windows 8
  • 0 Как получить доступ к одному действию контроллера внутри другого действия контроллера?
  • 1 Сеть d3 с несколькими ссылками в одном направлении
  • 1 Несколько графиков на одной странице, ошибка масштаба в D3.js
  • 1 Python — ускорить итерацию панд
  • 0 Tinymce форматирует текстовую область с помощью HTML. Не отображается в DOM?
  • 1 d3.js: групповые аккорды на диаграмме одним цветом
  • 1 Как в нижнем регистре все буквы, кроме первой буквы в TabLayout?
  • 0 угловой контроллер несколько раз
  • 0 Синтаксическая ошибка хранимой процедуры MySQL: если еще
  • 1 Возможная ошибка с внедрением зависимости на MvvmCross
  • 0 Я должен обновить страницу AngularJS, чтобы увидеть, добавил ли я что-то
  • 0 JQuery TableSorter не сортирует вторую таблицу
  • 1 генерировать данные из базы данных в Excel с помощью Python, но дата и время в Excel не правильный формат
  • 0 Вырезать URL-адрес изображения API Facebook

Источник

Как передать функцию в функцию java

Передать функцию в качестве параметра в другую функцию можно разными способами. Рассмотрим некоторые из них.

1) Воспользуемся функциональным интерфейсом Predicate :

import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class App  public static void main(String[] args)  ListString> list1 = List.of("1", "22", "333", "4444"); ListString> filteredList1 = filterList(list1, x -> x.length() >= 3); System.out.println(filteredList1); // => [333, 4444] ListInteger> list2 = List.of(1, 2, 3, 4); ListInteger> filteredList2 = filterList(list2, x -> x >= 3); System.out.println(filteredList2); // => [3, 4] > public static T> ListT> filterList(ListT> list, PredicateT> rool)  return list.stream() .filter(x -> rool.test(x)) .collect(Collectors.toList()); > > 

2) Воспользуемся готовым функциональным интерфейсом UnaryOperator :

public static void superMethod(UnaryOperatorString> method)  String str = "Hexlet"; String result = method.apply(str); System.out.println(result); > // вызов с передачей методов public class App  public static void main(String[] args) throws Exception  // передадим стандартный метод superMethod(String::toUpperCase); // => HEXLET // передадим лямбда-функцию superMethod(s -> s + "!"); // => hexlet! // передадим собственный метод superMethod(App::reverse); // => telxeh > public static String reverse(String str)  StringBuilder builder = new StringBuilder(); builder.append(str); return builder.reverse().toString(); > > 

3) Создадим собственный интерфейс и передадим объект этого типа в нашу функцию :

interface MyInterface  int count(int a, int b, int c); > public static void superMethodInterface(MyInterface method)  int a = 5, b = 10, c = 20; int result = method.count(a, b, c); System.out.println(result); > // вызов с передачей методов public class App  public static void main(String[] args) throws Exception  MyInterface count = new MyInterface()  @Override public int count(int a, int b, int c)  return a + b + c; > >; superMethodInterface(count); // => 35 superMethodInterface((a,b,c) -> a * b * c); // => 1000 superMethodInterface((a,b,c) -> a + b - c); // => -5 > > 

4) Получим метод с помощью рефлексии и передадим его :

public static void superMethodReflection(Object object, Method method) throws Exception  int a = 10; int b = 20; int result = (int) method.invoke(object, a, b); System.out.println(result); > // вызов с передачей методов public class App  public static void main(String[] args) throws Exception  // передадим стандартный метод Method method = Integer.class.getDeclaredMethod("max", int.class, int.class); superMethodReflection(0, method); // => 20 method = Integer.class.getDeclaredMethod("sum", int.class, int.class); superMethodReflection(0, method); // => 30 // передадим собственный метод method = App.class.getDeclaredMethod("concate", int.class, int.class); superMethodReflection(new App(), method); // => 1020 > public static int concate(int a, int b)  return Integer.parseInt("" + a + b); > > 

Источник

Читайте также:  Fastest server for php
Оцените статью