我正在学习编码,目前正在尝试通过最终学习课程来清理大量的代码。我告诉你这只是为了提个醒,我的术语可能仍然不可用:):)
我想为该类的每个项目/对象运行一个代码。
import java.util.*;
public class main {
public static void main(String[] args){
// defining the objects
LayerVideo item01 = new LayerVideo();
item01.path = "import/01/";
LayerVideo item02 = new LayerVideo();
item02.path = "import/02/";
LayerImage item03 = new LayerImage();
item03.path = "import/03/";
// here is the main goal:
// to run/call each object from class "Layer"
// "allLayers" does not exist, but that's what I don't know how to do.
allLayers.forEach( item ->{
System.out.println( item.path );
// expected result in console:
// import/01/
// import/02/
// import/03/
});
}
public static class Layer {
}
public static class LayerVideo extends Layer {
public String path;
}
public static class LayerImage extends Layer {
public String path;
}
}
答案 0 :(得分:3)
两件事:
public static class LayerVideo
进入内部学习。如果它们非常重要,则每个类都应放入其自己的 Java文件中。除此之外,重点可能是:如果您想为两个不同的类进行常见的事情,那么您的基类就需要这样,
public abstract class Layer {
private String path;
public String getPath() { return path; }
public void setPath(String newPath) { path = newPath; }
,然后您的子类仅继承该行为。
然后,您只需将扩展了 base 类型的对象添加到集合中即可。
List<Layer> layers = new ArrayList<>();
Layer layer = new VideoLayer();
layers.add(layer);
答案 1 :(得分:0)
因此,借助@GhostCat的帮助和指针,我来到了以下工作代码:
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() );
// Aggregate with .forEach(), but will switch to .stream() to also be able to filter
settings.layers.forEach( layer -> {
System.out.println( layer.path );
// do stuff
});
}
}
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 LayerImage(true, "input/01/", new int[] {255,255,255} ) );
layers.add( new LayerImage(false, "input/02/", new int[] {255,0,0} ) );
layers.add( new LayerVideo(true, "input/03/", new int[] {0,0,255} ) );
}
}
Layer.java
public abstract class Layer {
boolean run;
String path;
int[] color;
public Layer(boolean startRun, String startPath, int[] startColor) {
run = startRun;
path = startPath;
color = startColor;
}
}
LayerImage.java
public class LayerImage extends Layer {
public LayerImage( boolean startRun, String startPath, int[] startColor) {
super( startRun, startPath, startColor) ;
}
}
LayerVideo.java
public class LayerVideo extends Layer {
public LayerVideo( boolean startRun, String startPath, int[] startColor) {
super( startRun, startPath, startColor) ;
}
}
在main.java中,稍后我将交换器.forEach()与.stream()交换。声音更灵活,能够提前过滤结果似乎是一个很大的优势。 (然后,我也可以使用item.run来查看是否要运行此层)。
为什么会有一个设置类?我希望能够在一个文件中为结果设置所有设置和变量。这样,我可以(我认为)快速使用不同的设置文件。也许以后也将其更改为XML输入。使用GUI或其他任何方法。 (您可能会想“啊,夏天的孩子”,到达那儿后我会过桥)。
完成后,Layer SuperClass将在构造函数中包含约10个参数/参数。通过给super()传递子类,给子类带来很多改变和维护;然后进行更改。我将拥有20个子类。有没有更有效的方法?
在上面的代码中我可以做得更好的任何其他指针吗?
所有很多今天已经学会了!谢谢大家,特别感谢@GhostCat
答案 2 :(得分:-1)
我亲自为每个类从对象创建一个静态ArrayList,并将对象添加到构造函数中(使用list.add(this))。
赞:
public class Layer{
static ArrayList<Layer> layerList = new ArrayList<>();
public Layer() {
layerList.add(this);
}
}