Для тех, у кого есть проблемы с MVC3 с JSON, который автоматически десериализуется для связующего и является слишком большим, вот решение.
Благодаря http://blog.naver.com/techshare/100145191355 и https://gist.github.com/DalSoft/1588818 для указания мне в правильном направлении, как это сделать. Последняя ссылка на первом сайте содержит полный исходный код для решения.
Компилированные константы могут быть только примитивы и строки :
15,28. Постоянные выражения
Время компиляции постоянное выражение - это выражение, обозначающее значение примитивного типа или строки, которая не выполняется резко и состоит в том, чтобы использовать только следующие:
- литералы примитивного типа и Литералы типа
string
- отливы от примитивных типов и отливок к строке
- [...] Операторы [...]
- Сингезированные выражения, содержащиеся в скользящем языках которых является постоянным выражением.
- Простые имена, которые относятся к постоянным переменным.
- Квалифицированные имена формы TypEname . Идентификатор , которые относятся к постоянным переменным.
На самом деле в Java нет способа защищать предметы в массиве. Во время выполнения кто-то всегда может сделать FieldValues.field1 [0] = «Value3»
, поэтому массив не может быть постоянным, если мы выглядим глубже.
Вы можете использовать константу (то есть статическая, окончательная переменная) в качестве параметра для аннотации. В качестве быстрого примера я использую что-то вроде этого справедливо:
import org.junit.Test;
import static org.junit.Assert.*;
public class MyTestClass
{
private static final int TEST_TIMEOUT = 60000; // one minute per test
@Test(timeout=TEST_TIMEOUT)
public void testJDK()
{
assertTrue("Something is very wrong", Boolean.TRUE);
}
}
Обратите внимание, что можно пройти Test_Timeout
постоянную прямо в аннотацию.
ОтHAPHand я не вспоминаю, что когда-либо пробовал это с массивом, поэтому вы можете бежать в некоторые проблемы с небольшими различиями в том, как массивы представлены как параметры аннотации по сравнению с переменными Java? Но как для другой части вашего вопроса, вы определенно можете использовать постоянную строку без каких-либо проблем.
Редактировать: Я только что попробовал это со строковым массивом, и не столкнулся с этой проблемой - однако компилятор сделал , сказал мне, что «значение атрибута должно быть постоянным», несмотря на Массив определяется как публичная статическая финальная строка []
. Возможно, это не нравится тот факт, что массивы смещаются? Хм ...
ли кто-то знает, как я могу использовать Константа строки или строка [] постоянная Чтобы поставить стоимость аннотации?
К сожалению, вы не можете сделать это с массивами. С нерубряными переменными значение должно быть окончательным статическим.
Вы не предоставляете его массивом в вашем примере. Следующие компилирует нормально:
public @interface SampleAnnotation {
String[] sampleValues();
}
public class Values {
public static final String v1 = "A";
public static final String v2 = "B";
@SampleAnnotation(sampleValues = { v1, v2 })
public void foo() {
}
}