我做了这个方法:
public void update(){
for(GameObject object : objects)
object.update();
}
然后我的IDE我可以使用每一个代替任何,我认为我做了,任何我让它取代它。这就是它给我的:
public void update(){
objects.forEach(GameObject::update);
}
乍一看,这似乎更好,然后我的IDE说,您可以将它转换为lambda表达式,这将是:
public void update(IUpdater updater){
objects.forEach((object) -> object.update());
}
这给人的印象是GameObject::Update
是lambda表达式的一段时间,而我所知道的Java8中唯一的新东西(object)->object.update()
取代了匿名类,估计它还隐藏在什么地方。
“Objects.Foreach(GameObject::Update)”这一本质是否意味着:
public void update(){
objects.forEach(new Consumer<GameObject>() {
@Override
public void accept(GameObject object) {
object.update();
}
});
}
如果是这种情况,那么我的原始方法是否比gameobject::update
更有效。保留了GameObject::Update
的方法,但如果发现原始方法更有效,就会把它改回来。
我提出这个问题纯粹是基于表现。
我会使用任何一个你觉得最简单和最清楚的,这可能表现足够好。一旦您对应用程序进行了分析,并显示这是您最大的问题之一,那么您就应该考虑优化它。
但是为了学术目的...
方法引用和lambda表达式之间的一个关键区别是它们是不可捕获的。这意味着该对象只在HotSpot Java8上创建一次。如果您使用匿名内部类,它将在每次调用代码时创建(但不是在每次迭代时)注意:使用for-each循环会使用迭代器,这可能会创建一个新对象,但转义分析不会消除它。
我需要一些帮助,从理论上更好地理解方法。我读过(强调我的): 当对两个单独的对象调用时(根据方法,这两个对象是相等的),它将返回相同的哈希代码值。但是,如果在两个不相等的对象上调用它,它不一定会返回不同的整数值。 上述例外情况会发生在哪里?
我尝试了以下代码,但不理解输出: 输出:字符串 为什么? 感谢您的关注!
重载子类中重写的方法,我是重载父方法还是重载子类方法? 我大体上理解什么是超载和超驰。 重载-同一方法在同一个类中有不同的参数和可能的返回类型。 重写-子类中的方法签名与父类中的方法签名相同,但实现不同。 方法B.a(INTX)是重载a.a还是重载B.a?
subA类是A类的子类。我试图重写一个方法,但不知怎的,它不允许我重写它。为什么会这样?是因为参数中的参数吗? 读取错误消息: 名称冲突:subA中的add(E#1)和A中的add(E#2)具有相同的擦除,但两者都不重写另一个,其中E#1、E#2是类型变量: E#1扩展了subA类中声明的对象 E#2扩展了A类中声明的对象 超类A: 子类subA:
我正在尝试使用Typescript重载一个方法。Java或C#中通常的重载方式似乎不适用于Typescript。我不能这样做: 我四处搜索,发现我必须这样做: 对我来说,这个方法似乎很不整洁,很难维护,因为我把所有东西都乱七八糟地放在一个方法中,并使用if/ther语句来划分逻辑。 有没有更好的方法可以在Typescript中进行方法重载?
为什么上面的代码有编译错误“java:default method equals in interface Table重写java.lang.Object的一个成员”?难道我们不能使用接口默认方法重写hashCode和equals方法吗?假设我在同一个接口中有方法来确定实现这个接口的对象的相等性?