Использование CheckerFramework (или чего-то еще) для обнаружения легко заменяемых параметров в методах?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Использование CheckerFramework (или чего-то еще) для обнаружения легко заменяемых параметров в методах?

Сообщение Anonymous »

У меня есть метод, который принимает, например, два длинных примитива. Как добавить проверки, чтобы предотвратить случайную замену параметров?
Нечто подобное должно обнаруживаться.

Код: Выделить всё

    public void startSomethingElse(@AccountIdParam long accountId, @BalanceParam long balance) {
System.out.println("Account " + accountId + " balance " + balance);
}

public void startOfSomething() {
@AccountIdParam long accountId = 1;
@BalanceParam long balance = 100;
startSomethingElse(balance, accountId);
}
Используя CheckerFramework, я мог бы создавать такие квалификаторы:

Код: Выделить всё

@SubtypeOf({})
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface AccountIdParam {}

@SubtypeOf({})
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface BalanceParam {}
Но это не сработает без создания иерархии, поэтому мне нужно сделать что-то вроде этого, что также не будет работать из-за двух конечных узлов:

Код: Выделить всё

@SubtypeOf({Unqualified.class})
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface AccountIdParam {}

@SubtypeOf({Unqualified.class})
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface BalanceParam {}

@DefaultQualifierInHierarchy
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@SubtypeOf({})
public @interface Unqualified {}
Как бы вы это сделали?
Пара ограничений:
  • Мне нужно использовать примитивы, поэтому создание подклассов объектов Java не является вариантом.
  • Мне нужна проверка во время компиляции, а не во время выполнения.


Подробнее здесь: https://stackoverflow.com/questions/798 ... ble-parame
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»