использовать два набора констант в одной функции

#java #performance #function #constants

#java #Производительность #функция #константы

Вопрос:

У меня есть функция, для которой в двух разных ситуациях я хочу использовать два разных набора констант. Например: в одном я хочу использовать

 private final class MoveOverTarget
    {
        private final int SPEED = 3000;
        private final int SLOW_SPEED = 0;
        private final float D_B_SLOW_REGION = 0;
        public final float D_B_TARGET_RANGE = 0;
    }
  

а в другой

 private final class MoveTowardsTarget
    {
        private final int SPEED = 1000;
        private final int SLOW_SPEED = 500;
        private final float D_B_SLOW_REGION = 50;
        public final float D_B_TARGET_RANGE = 10;
    }
  

для одной и той же функции

 private boolean bValInTargetRange(float targetValue, boolean moveOverTarget)
    {}
  

на данный момент я не могу придумать простое в реализации решение и, похоже, не нахожу правильных ключевых слов для Google. Можете ли вы мне помочь?

Заранее спасибо.

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

1. Рассматривали ли вы возможность использования экземпляров класса для хранения связанных данных (набора констант) вместо отдельных классов?

2. Если значения констант меняются, они не являются константами 🙂 Используйте карту, используйте два экземпляра одного и того же класса, причем каждый экземпляр инициализируется соответствующими значениями, используйте перечисления или наследование и т. Д. Здесь у вас есть много вариантов

3. @KarlKnechtel и fps большое вам спасибо за эти ответы, я сделал это с двумя экземплярами класса, в котором хранятся только связанные данные, которые я затем использую в своем методе.

Ответ №1:

Сделайте их public static :

 public static final int SPEED = 3000;
  

И ссылаться на них, используя имя класса:

 MoveOverTarget.SPEED
MoveTowardsTarget.SPEED
  

Также подумайте enum , будет ли лучше использовать s. Другой вариант: определить две копии метода, по одной в каждом классе, и ссылаться на константы из этого класса в методе.

Еще один вариант: определите абстрактный суперкласс, напишите там метод и получите доступ к константам с помощью абстрактных методов. Затем определите два подкласса и в каждом реализуйте абстрактные методы, которые возвращают разные значения для констант, также определенных в каждом из подклассов.

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

1. Спасибо. Мне это кажется слишком сложным, и это то, чего я хотел избежать.