Как определить метод с параметром Integer (путь-заполнитель)? - PullRequest
0 голосов
/ 11 марта 2019

Предисловие

Я хотел бы сказать две вещи:

  1. Я не знаю, как сформулировать этот вопрос в нескольких словах.Поэтому я не могу найти то, что я ищу при поиске (на stackoverflow).По сути, я прошу прощения, если это дубликат.
  2. Я программировал Java последовательно только в течение месяца или около того.Поэтому я прошу прощения, если я задал очевидный вопрос.

Вопрос

Я хотел бы иметь метод с параметром , который содержит (путь к) целое число .

Как такой метод реализован в коде Java?

Ограничения

The параметр должен быть универсальный .Таким образом, когда имеется кратное из этих целых переменных , правильная может быть использована в качестве аргумента для метода, когда он вызывается (во время выполнения).

Моя идея как псевдокод

Вот идея того, что я хочу (в псевдокоде).Идея в основном состоит из 3 частей:

  • метод с параметром
  • переменные, содержащие целые значения
  • вызовы метода с конкретными значениями

(A) Метод

.Ниже приводится определение моего метода с именем hey с универсальным параметром с именем pathToAnyInteger типа genericPathToInt:

class main {
    method hey(genericPathToInt pathToAnyInteger) {
        System.out.println(pathToAnyInteger);
    }
}

(B) Несколько целочисленных переменных

Ниже приведены кратные целые переменные (например, A и B; каждая содержит целое число ):

class A {
    myInt = 2;
}

class B {
    myInt = 8;
}

(C) Вызовы методов во время выполнения

Ниже приведен мой основной метод, который выполняется при запуске программы.Таким образом, во время выполнения (1) ранее определенный метод hey вызывается с использованием (2) каждой из переменных, которые содержат различные целочисленные значения:

class declare {
    main() {
        hey("hey " + A.myInt);
        hey("hey " + B.myInt);
   }
}

Ожидаемый результат

//output
hey 2
hey 8

Личное замечание

Опять же, извините, если это дубликат, и извините, если это глупый вопрос.Если вам нужны дальнейшие разъяснения, я был бы готов помочь.Любая помощь приветствуется.И, эй, если вы собираетесь быть недобрым (в основном оскорблениями, но подразумеваемым тоном) в своем ответе, не отвечайте, даже если у вас есть решение.Ваша помощь не нужна.Спасибо!:)

Ответы [ 3 ]

0 голосов
/ 11 марта 2019

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

void hey(Supplier<Integer> integerSupplier) {
     System.out.printl("Hey" + integerSupplier.get());
}

Этот метод объявляет параметр, который может быть «вызовом метода, который возвратит целое число».

Вы можете вызвать этот метод ипередайте ему так называемое лямбда-выражение, например:

hey(() -> myObject.getInt());

Или, в некоторых случаях, вы можете использовать так называемую ссылку на метод, например:

Hey(myObject::getInt)

В этом случае обаозначает «вызов метода hey, и когда ему нужно целое число, вызовите getInt, чтобы получить его».Лямбда-выражение также позволяет напрямую ссылаться на поле, но открывать поля считается плохой практикой.

0 голосов
/ 11 марта 2019

Если я правильно понял ваш вопрос, вам нужно использовать наследование, чтобы достичь того, что вы ищете.

давайте начнем с создания иерархии:

class SuperInteger {
   int val;
   //additional attributes that you would need.

   public SuperInteger(int val) {
      this.val = val;
   }
   public void printValue() {
      System.out.println("The Value is :"+this.value);
   }
}  

class SubIntA extends SuperInteger {
    //this inherits "val" and you can add additional unique attributes/behavior to it 
   public SubIntA(int val) {
      super(val);
   }
   @override
   public void printValue() {
      System.out.println("A Value is :"+this.value);
   }
}

class SubIntB extends SuperInteger {
    //this inherits "val" and you can add additional unique attributes/behavior to it 
   public SubIntB(int val) {
      super(val);
   }
   @override
   public void printValue() {
      System.out.println("B Value is :"+this.value);
   }
}

Теперь вы можете принимать метод Signature и параметр типа SuperInteger, и при вызове метода вы можете передавать SubIntA / SuperInteger / SubIntB, потому чтоJava неявно Upcasts для вас.

, поэтому:

public void testMethod(SuperInteger abc) {
     a.val = 3;
     a.printValue();
}

можно вызвать из основного режима с помощью:

public static void main(String args[]){
   testMethod(new SubIntA(0));
   testMethod(new SubIntB(1));
   testMethod(new SuperInteger(2));
}

, получая вывод наподобие:

A Value is :3
B Value is :3
The Value is :3
0 голосов
/ 11 марта 2019

Целые числа в Java - это примитивные типы, которые передаются по значению.Таким образом, вы не передаете "путь" целому числу, вы передаете фактическое значение.Объекты, с другой стороны, передаются по ссылке.

Ваш псевдокод будет работать в Java с некоторыми изменениями.В коде предполагается, что все классы находятся в одном пакете, в противном случае вам нужно будет сделать все общедоступным (или другой модификатор доступа в зависимости от варианта использования).

// First letter of a class name should be uppercase
class MainClass {
    // the method takes one parameter of type integer, who we will call inputInteger 
    // (method-scoped only)
    static void hey(int inputInteger) {
        System.out.println("hey " + inputInteger);
    }
}

class A {
    // instance variable
    int myInt = 2;
}
class B {
    // instance variable
    int myInt = 8;
}
class Declare {
    public static void main() {
        // Instantiate instances of A and B classes
        A aObject = new A();
        B bObject = new B();
        // call the static method
        MainClass.hey(aObject.myInt);
        MainClass.hey(bObject.myInt);
    }
}

//output
hey 2
hey 8

Этот код сначала определяет класс MainClass, который содержитваш метод эй .Я сделал метод статическим, чтобы можно было просто вызывать его как MainClass.hey().Если бы он не был статическим, вам нужно было бы создать экземпляр объекта MainClass в классе Declare, а затем вызвать метод для этого объекта.Например:

...
MainClass mainClassObject = new MainClass();
mainClassObject.hey(aObject.myInt);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...