Ломбок аннотации для внутренних классов c - PullRequest
3 голосов
/ 15 января 2020

Перед началом, когда я искал ответ на этот вопрос, я смотрел на следующий вопрос, который не ответил на мой: * Можно ли добавить @Builder и @AllArgsConstructor в stati c внутренних классах [Ломбок]?

В своих тестах я создал внутренний класс, содержащий мои тестовые случаи:

@AllArgsConstructor
@Getter
static class TestData {
    private final String testCase;
    private final String value1;
    private final String value2;
    private final int value3;
}

Также в этих тестах у меня есть список, содержащий все эти контрольные примеры:

    private static final List<TestData> testData = Collections.unmodifiableList(Arrays.asList(
            new TestData("test case 1", "value1", "value2", 1),
            new TestData("test case 2", "value2", "value2", 2),
            new TestData("test case 3", "value2", "value1", 3),
            new TestData("test case 4", "value2", "value2", 4),
    ));

Однако, когда я компилирую код, я получаю следующую ошибку:

error: constructor TestData in class TestData cannot be applied to given types;
            new TestData("test case 1", "value1", "value2", 1),
            ^
  required: no arguments
  found: String,String,String,int
  reason: actual and formal argument lists differ in length

РЕДАКТИРОВАТЬ Так как, кажется, это что-то, что не работает в моем проекте Я прилагаю полный пример кода, который не работает:

public class Testing {

    private static final List<TestData> testData = Collections.unmodifiableList(Arrays.asList(
            new TestData("test case 1", "value1", "value2", 1),
            new TestData("test case 2", "value2", "value2", 2),
            new TestData("test case 3", "value2", "value1", 3),
            new TestData("test case 4", "value2", "value2", 4)
    ));

    @Test
    public void aTest() {
        for (final TestData data : testData) {
            System.out.println("***********************");
            System.out.println(data.getTestCase());
            System.out.println(data.getValue1());
            System.out.println(data.getValue2());
            System.out.println(data.getValue3());
        }
    }

    @AllArgsConstructor
    @Getter
    static class TestData {
        private final String testCase;
        private final String value1;
        private final String value2;
        private final int value3;
    }
}

Это мой файл build.gradle:

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.10'

    annotationProcessor 'org.projectlombok:lombok:1.18.10'

    testCompile 'junit:junit:4.12'
    testCompile 'org.projectlombok:lombok:1.18.10'
}

EDIT2 Вы можете найти пример кода в проекте, который я запускаю на моей машине (и некоторых из моих колледжей) в этом репозитории GitHub: https://github.com/yonatankarp/stackoverflow_lombok

Ответы [ 2 ]

1 голос
/ 15 января 2020

Я не знаю, что не так с вашей настройкой, но я могу воспроизвести и решить вашу проблему.

Обратите внимание, что ваша проблема не имеет ничего общего с вложенными (*) классами, Lombok AFAIK не запускался вообще.

Это мое build.gradle:

plugins {
    id 'java'
    id "io.freefair.lombok" version "4.0.1"
}

lombok {
        version = "1.18.10"
}

group 'org.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile 'junit:junit:4.12'
}

Я удалил все упоминания lombok и добавил и настроил плагин, делающий это правильно.

I понятия не имею, что было не так.


(*) TestData является «вложенным», но не «внутренним». Не знаю, почему, но вот что говорит Oracle https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

0 голосов
/ 15 января 2020

Существует конфигурация IntelliJ, в которой вы можете включить обработку аннотаций.

Предпочтения -> Компилятор -> Процессоры аннотаций -> Включить обработку аннотаций

Ваш код также работал на моем IntelliJ, как указано в Четан Комакула. ​​

Обс: Я не думаю, что вам нужно поле stati c, я думаю, вы могли бы использовать метод @BeforeAll или @BeforeEach для инициализации массива testData. но это улучшение.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...