Почему в Java нельзя аннотировать все операторы?

Я столкнулся с простой проблемой, наивно пытаясь сделать это:

public void someMethod(){    
  int x = 0;
  ...
  @SuppressWarnings({"rawtypes", "unchecked"})
  x = ((Comparable)lhs).compareTo(rhs);
  ...
}

Это незаконно и должно быть перефразировано для компиляции:

public void someMethod(){  
  ...  
  @SuppressWarnings({"rawtypes", "unchecked"})
  int x = ((Comparable)lhs).compareTo(rhs);
  ...
}

Я проследил проблему до ElementType: оператор не является допустимым элементом программы. Это довольно запутанно — я думал, что операторы — это что-то вроде супертипа всех элементов программирования.

  1. Есть ли теоретическая или техническая причина для ограничения действительных элементов?

  2. Можно ли это сделать по-другому, т.е. предположим, что я мог бы заменить ElementTypeсвоим собственным классом и освоить плавные изменения, мог бы я аннотировать какое-либо утверждение?

7
задан kostja 15 April 2015 в 12:59
поделиться