不久前,我遇到了比我更好的竞争性答案,我的答案是使用全新的方法代替lambda。
Stream.generate(new AtomicInteger(1)::getAndIncrement)...
我查看了有关方法引用的Oracle规范,并定义了4种类型:
ContainingClass::staticMethodName
containingObject::instanceMethodName
ContainingType::methodName
ClassName::new
我很难将这一分类。我还没有找到关于SO的任何问题或文档中说明的任何相关问题。如何将其翻译为匿名课程?
我的怀疑是:
IntStream.generate(new IntSupplier() {
AtomicInteger atom = new AtomicInteger(1);
@Override
public int getAsInt() {
return atom.getAndIncrement();
}
})....
…我不知道这怎么可能。乍一看,我想表达的是:
IntStream.generate(new IntSupplier() {
@Override
public int getAsInt() {
return new AtomicInteger(1).getAndIncrement();
}
})....
… …不过这没什么() -> new AtomicInteger(1).getAndIncrement()
。
这种表达在哪里定义以及如何在lambda / anonymous类中完全重写?
好吧,newAtomicInteger(1)
返回一个实例,所以是第二个实例。有关如何翻译的确切详细信息是特定于实现的,但是它是创建的单个实例,并且由JLS
15.13.3支持
首先,如果方法引用表达式以ExpressionName或Primary开头,则将评估此子表达式
用简单的英语来说,before部分在 第一次遇到声明时会::
进行评估。 __
您的假设如何转换几乎是正确的,就像在函数本身之外生成实例并使用该实例一样-由于它实际上是最终的,因此允许这样做。
上面写着编译错误 Employee::new、1L、“”、“ 无法解析构造函数。
问题内容: 对不起任何较小的语法错误或其他错误,我正在使用Jitsi模块进行此操作,并且对Java不太熟悉,因此想确认正在发生的事情以及为什么以及如何对其进行修复。 使用按名称加载类方法创建类B的实例时,应用程序正在执行此操作: 在类B中调用重写的load() 初始化变量(根据调试器调用“私有字符串testString = null”),将其无效。 这是预期的Java行为吗?是什么原因造成的?它是
鉴于 IntelliJ IDEA 2016.1.1报告“可以替换为方法引用”。 我知道无参数构造函数的< code>Foo::new语法,但是不知道如何将< code>foo作为参数传入。我肯定漏掉了什么。
本文向大家介绍使用Java8中的方法引用来引用构造函数,包括了使用Java8中的方法引用来引用构造函数的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式使您可以将功能作为参数传递给方法。您也可以使用lambda表达式调用现有方法。 方法引用是简单,易于阅读的lambda表达式,可通过lambda表达式来调用/引用以及现有方法的名称。除了实例和静态方法,您还可以使用new关键字
我的目标是优化我的应用程序代码。我的代码如下所示: 当我在Netbeans中使用Findbugs进行静态分析时,它显示了一个类似于“方法调用无效的新整数(int)构造函数;使用Integer.valueOf(int)”的警告/错误。 我知道新整数(int)和整数之间的区别。valueOf(int)。 一个创建一个附加对象,另一个不创建。一个不缓存,另一个缓存。 所以我这样修改了我的代码... 但同
IntelliJ一直建议我用方法引用替换我的lambda表达式。 两者之间有什么客观差异吗?