У меня есть вопрос, который долго не давал мне спать прошлой ночью :) Я создал многоуровневый класс, такой как:
- Layer
- LayerImage
- LayerHalftone
- LayerHalftoneVideo
- LayerHalftoneImage
Подход
- Theобъекты создаются в файле settings.java
- и добавляются в список коллекции слоев.
- В файле main.java я пытаюсь объединить их тремя способами.
Проблема
Ни одна из совокупностей не работает (читай: дайте желаемый результат) Все они только зацикливают последний элемент списка сбора.
Мой вопрос будет, где я могу пойти не так? Что мне нужно изменить, чтобы это заработало?
Извините за длинный код. Я попытался сделать его максимально компактным для этой иллюстрации.
Результат консоли
5
[LayerHalftoneVideo@61bbe9ba, LayerHalftoneVideo@610455d6, LayerHalftoneVideo@511d50c0, LayerHalftoneImage@60e53b93, LayerImage@5e2de80c]
LayerHalftoneVideo@511d50c0
title 01
.forEach()
title 01
title 01
title 01
title 01
title 01
.stream()
title 01
title 01
title 01
title 01
title 01
.for()
title 01
title 01
title 01
title 01
title 01
Требуемый результат консоли
(для каждого типа цикла)
smoke
video 01
video 02
image 01
title 01
main.java
public class main {
public static void main(String[] args) {
// debug to see amount of elements in list
System.out.println( settings.layers.size() );
System.out.println( settings.layers );
System.out.println( settings.layers.get(2) );
System.out.println( settings.layers.get(2).idReadable );
System.out.println( "\n.forEach() ");
settings.layers.forEach( layer -> {
System.out.println( layer.idReadable);
});
System.out.println( "\n.stream() ");
settings.layers
.stream()
.forEach( layer -> {
System.out.println( layer.idReadable);
});
System.out.println( "\n.for() ");
for (Layer layer : settings.layers) {
System.out.println( layer.idReadable );
}
}
}
settings.java
import java.util.ArrayList;
import java.util.List;
public class settings extends main {
public static List<Layer> layers = new ArrayList<>();
static {
layers.add(new LayerHalftoneVideo(
"smoke",
false,
"video/smoke_02.mp4",
1000,
1414,
1,
0,
30,
50,
0,
new int[] { 255,255,255 },//color_03,
30,
1.0f
));
layers.add(new LayerHalftoneVideo(
"video 01",
true,
"video/01.mp4",
1000,
1414,
1,
0,
40,
80,
1,
new int[] { 255,255,255 },//color_02,
30,
1.0f
));
layers.add(new LayerHalftoneVideo(
"video 02",
true,
"video/02.mp4",
1000,
1414,
1,
0,
0,
100,
1,
new int[] { 255,255,255 },//color_00,
30,
1.0f
));
layers.add(new LayerHalftoneImage(
"image 01",
false,
"illustration/1.jpg",
1000,
1414,
1,
0,
20,
80,
1,
new int[] { 255,255,255 }//color_02
));
layers.add(new LayerImage(
"title 01",
true,
"image/title_01.png"
));
}
}
Слой. Java
public abstract class Layer {
static String idReadable;
static boolean runThisLayer;
static String inputPath;
public Layer(
String _idReadable,
boolean _runThisLayer,
String _inputPath
) {
idReadable = _idReadable;
runThisLayer = _runThisLayer;
inputPath = _inputPath;
}
}
LayerImage.java
public class LayerImage extends Layer {
public LayerImage(
String _idReadable,
boolean _runThisLayer,
String _inputPath
) {
super(
_idReadable,
_runThisLayer,
_inputPath
);
}
}
LayerHalftone.java
public class LayerHalftone extends Layer {
static int inputWidth;
static int inputHeight;
static int patternOffset;
static int patternSkipEach;
static int patternAngleRadian;
static int patternBlockAmount;
static int patternNumber;
static int[] patternColor;
public LayerHalftone(
String _idReadable,
boolean _runThisLayer,
String _inputPath,
int _inputWidth,
int _inputHeight,
int _patternOffset,
int _patternSkipEach,
int _patternAngleRadian,
int _patternBlockAmount,
int _patternNumber,
int[] _patternColor
) {
super(
_idReadable,
_runThisLayer,
_inputPath
);
inputWidth = _inputWidth;
inputHeight = _inputHeight;
patternOffset = _patternOffset;
patternSkipEach = _patternSkipEach;
patternAngleRadian = _patternAngleRadian;
patternBlockAmount = _patternBlockAmount;
patternNumber = _patternNumber;
patternColor = _patternColor;
}
}
LayerHalftoneVideo.java
public class LayerHalftoneVideo extends LayerHalftone {
public static int videoTimeStart;
public static float videoTimeSpeed;
public LayerHalftoneVideo(
String _idReadable,
boolean _runThisLayer,
String _inputPath,
int _inputWidth,
int _inputHeight,
int _patternOffset,
int _patternSkipEach,
int _patternAngleRadian,
int _patternBlockAmount,
int _patternNumber,
int[] _patternColor,
int _videoTimeStart,
float _videoTimeSpeed
) {
super(
_idReadable,
_runThisLayer,
_inputPath,
_inputWidth,
_inputHeight,
_patternOffset,
_patternSkipEach,
_patternAngleRadian,
_patternBlockAmount,
_patternNumber,
_patternColor
);
videoTimeStart = _videoTimeStart;
videoTimeSpeed = _videoTimeSpeed;
}
}
LayerHalftoneImage.java
public class LayerHalftoneImage extends LayerHalftone {
public LayerHalftoneImage(
String _idReadable,
boolean _runThisLayer,
String _inputPath,
int _inputWidth,
int _inputHeight,
int _patternOffset,
int _patternSkipEach,
int _patternAngleRadian,
int _patternBlockAmount,
int _patternNumber,
int[] _patternColor
) {
super(
_idReadable,
_runThisLayer,
_inputPath,
_inputWidth,
_inputHeight,
_patternOffset,
_patternSkipEach,
_patternAngleRadian,
_patternBlockAmount,
_patternNumber,
_patternColor
);
}
}