- 10
- 1
Снова здравствуйте
Проблема с созданием кодека (CODEC) в классе. По примеру исходного кода, я делаю это как-то так:
(класс называется FractalChunkGenerator, в нём есть поле settings и функция getSettings типа FractalGeneratorSettings, в этом типе тоже есть кодек, с ним проблемы те же)
Когда запускаю с этим, выдаёт следующее:
И мне не совсем понятно, почему оно не компилируется. В исходниках есть почти такой же пример с FlatLevelSource, который, как и FractalChunkGenerator, наследуется от ChunkGenerator, у которого функциональных интерфейсов в родительских классах вообще нет.
Да, есть интерфейс NoiseBiomeSource, но у него, вроде, нет аннотации @FunctionalInterface, а даже если он и функциональный, то не совсем понятно, почему FractalChunkGenerator перестаёт им быть.
Ещё пробовал так, как указано здесь. Получилось так:
(Изменилась только последняя строка)
Теперь ошибка такая:
То есть, в исходниках всё же было правильнее
Можете помочь, пожалуйста?
Проблема с созданием кодека (CODEC) в классе. По примеру исходного кода, я делаю это как-то так:
Java:
public static final Codec<FractalChunkGenerator> CODEC = RecordCodecBuilder.create(
(instance) -> FractalChunkGenerator.commonCodec(instance).and(
(App)FractalGeneratorSettings.CODEC.fieldOf("settings").forGetter(FractalChunkGenerator::getSettings))
.apply((Applicative)instance, instance.stable(FractalChunkGenerator::new)));
(класс называется FractalChunkGenerator, в нём есть поле settings и функция getSettings типа FractalGeneratorSettings, в этом типе тоже есть кодек, с ним проблемы те же)
Когда запускаю с этим, выдаёт следующее:
Форматирование (BB-код):
FractalChunkGenerator.java:73: error: incompatible types: cannot infer type-variable(s) A
.apply((Applicative)instance, instance.stable(FractalChunkGenerator::new)));
^
(argument mismatch; Object is not a functional interface)
where A,O are type-variables:
A extends Object declared in method <A>stable(A)
O extends Object declared in class Instance
И мне не совсем понятно, почему оно не компилируется. В исходниках есть почти такой же пример с FlatLevelSource, который, как и FractalChunkGenerator, наследуется от ChunkGenerator, у которого функциональных интерфейсов в родительских классах вообще нет.
Да, есть интерфейс NoiseBiomeSource, но у него, вроде, нет аннотации @FunctionalInterface, а даже если он и функциональный, то не совсем понятно, почему FractalChunkGenerator перестаёт им быть.
Ещё пробовал так, как указано здесь. Получилось так:
Java:
public static final Codec<FractalChunkGenerator> CODEC = RecordCodecBuilder.create(
(instance) -> FractalChunkGenerator.commonCodec(instance).and(
(App)FractalGeneratorSettings.CODEC.fieldOf("settings").forGetter(FractalChunkGenerator::getSettings))
.apply(instance, FractalChunkGenerator::new));
Теперь ошибка такая:
Форматирование (BB-код):
FractalChunkGenerator.java:73: error: no suitable method found for apply(Instance ,FractalChu[...]::new)
.apply(instance, FractalChunkGenerator::new));
^
method P2.apply(Applicative,BiFunction) is not applicable
(argument mismatch; invalid constructor reference
incompatible types: Object cannot be converted to Registry<StructureSet>)
method P2.apply(Applicative,App) is not applicable
(argument mismatch; App is not a functional interface
no abstract method found in interface App)
То есть, в исходниках всё же было правильнее
Можете помочь, пожалуйста?