小编Jan*_*ina的帖子

每秒多次调用许多对象的许多方法

我有这样的结构

  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)

所以但是有些类有其他方法必须像那样循环,我不能从父级调用它们.

对于渲染方法......只要坚持一个事实,你必须在很短的时间内多次循环一段时间.

我无法通过这个...我被困在这里很长一段时间,我不知道如何解决这个问题.

java for-loop game-engine

5
推荐指数
1
解决办法
213
查看次数

Java 8流更简单

我有一些对象的列表.这些对象中有一些字段和其他内容随着时间的推移而变化.我希望列表中的某些元素具有某个值等于的值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 java-8 java-stream

4
推荐指数
1
解决办法
86
查看次数

Java 反射检查传递的对象是否为相同类型

我有一个带有比较方法的类。该方法将两个对象作为参数。使用 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 与其他汽车不同。

但它们仍然相同......我不知道如何通过反射解决这个问题......有什么想法吗?

java reflection

1
推荐指数
1
解决办法
1787
查看次数

标签 统计

java ×3

for-loop ×1

game-engine ×1

java-8 ×1

java-stream ×1

reflection ×1