我有这样的结构
abstract Class Entity {
//some variables...
//some methods ...
public abstract void render(Graphics g);
}
Run Code Online (Sandbox Code Playgroud)
那是父母..现在我有3个孩子..
Class A extends Entity{}
Class B extends Entity{}
Class C extends Entity{}
Run Code Online (Sandbox Code Playgroud)
每个类都有一些不同的东西做渲染.例如,绘制黄色圆圈,第二个绿色文本,第三个是显示图像.
但是......有一件事.
Class A have List<B>...
Class B have List<C>...
Run Code Online (Sandbox Code Playgroud)
一个实体有例如10个B ...每个B有20个C ...所以现在..我有一个渲染方法,每秒渲染60x ..我必须从每个对象调用每个渲染方法.
所以我有这样的事情
for(A a : listOfAs){
for(B b : listOfBs){
for(C c : listOfCs){
c.render(g);
}b.render(g);
}a.render(g);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你想象我有更多这样的对象,我称这种方法每秒60次......我发现这真的......真的很糟糕...我不知道如何更好地解决这个问题......我不要认为每个循环的这个实际上是最好的解决方案.任何想法?
我正在考虑像这样实施这个孩子:
Entity x = new A(); ...
Entity y = new B(); ...
Run Code Online (Sandbox Code Playgroud)
所以但是有些类有其他方法必须像那样循环,我不能从父级调用它们.
对于渲染方法......只要坚持一个事实,你必须在很短的时间内多次循环一段时间.
我无法通过这个...我被困在这里很长一段时间,我不知道如何解决这个问题.
我有一些对象的列表.这些对象中有一些字段和其他内容随着时间的推移而变化.我希望列表中的某些元素具有某个值等于的值true.我拿这个对象,我想在其他地方使用它.
当列表不包含具有该元素的对象时,我得到一个异常,我的应用程序崩溃了.所以我使用一个非常奇怪的代码来避免这种情况,我想知道,如果有更简单,更好的东西.
public class CustomObject{
private String name;
private boolean booleanValue;
//Getters and setters...
}
//Somewhere else I have the list of objects.
List<CustomObject> customList = new ArrayList<>();
//Now... here I am using this strange piece of code I want to know how to change.
if (customList.stream().filter(CustomObject::getBooleanValue).findAny().isPresent()) {
customList.stream().filter(CustomObject::getBooleanValue).findAny().get().... //some custom stuff here.
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我在这里做了非常丑陋的代码:调用两次相同的方法.我试过类似的东西
CustomObject customObject = customList.stream().filter.....
Run Code Online (Sandbox Code Playgroud)
并检查该对象是否为空,但它没有做我想要的.
我有一个带有比较方法的类。该方法将两个对象作为参数。使用 java 反射,我能够获得所有私有和受保护的字段,并使用一些花哨的东西检查它们的返回类型并做我想做的事情。
这对我个人来说很好。我知道我想做什么,所以我只比较两个相同类型的对象,仅此而已。
但是......很多人都在使用......他们有时无法阅读我放在那里的Javadocs和评论以及其他东西,所以我必须检查他们是否正在传递相同类型的对象。例如你有: Car a, Car b , Truck a, Truck b ... 等等.. 我需要检查两个传递的参数是否实际上是相同的比较类型 (Car with car , Truck with truck .. )
所以......我不知道这些东西......我应该使用反射列出所有字段的大小,然后检查所有字段是否具有相同的名称?或者有更好的解决方案吗?因为写一些东西,如果 fieldsOfA.size 与 fieldOfB.size 相同......然后 for 循环,如果它们相同来检查名称看起来有点奇怪..
还有一个问题。这些对象有一些其他对象的列表 - 例如 Car 有一个 Wheels 列表..并且您正在将车轮与其他汽车进行比较。他们在列表中有像 Wheel 1、Wheel 2、Wheel 3、Wheel 4 .. 而第二辆车有 Wheel1、Wheel 2、Wheel 4 和 WHeel 3 ..
所以对象是相同的,但只是交换了位置......有没有办法防止这种情况?我有一个跟踪代码,可以存储这些对象的所有差异。所以如果它们的位置不同,它会给我两个变化。轮 3 与其他汽车不同,轮 4 与其他汽车不同。
但它们仍然相同......我不知道如何通过反射解决这个问题......有什么想法吗?