相关疑难解决方法(0)

为什么必须为方法引用显式指定类/对象名?

当我想引用当前作用域中的方法时,我仍然需要指定类名(对于静态方法)或者this:: 操作符之前.例如,我需要写:

import java.util.stream.Stream;

public class StreamTest {
    public static int trimmedLength(String s) {
        return s.trim().length();
    }

    public static void main(String[] args) {
        System.out.println(Stream.of("  aaa  ", "  bb ", " c ")
                .mapToInt(StreamTest::trimmedLength).sum());
    }
}
Run Code Online (Sandbox Code Playgroud)

这不是一个大问题this,但有时看起来过于拥挤静态方法,因为类名可能很长.如果编译器允许我简单地编写它会很好::trimmedLength:

public static void main(String[] args) {
    System.out.println(Stream.of("  aaa  ", "  bb ", " c ")
            .mapToInt(::trimmedLength).sum());
}
Run Code Online (Sandbox Code Playgroud)

但是Java-8编译器不允许这样做.对我来说,如果类/对象名称的解析方式与普通方法调用相同,那么它似乎会非常一致.这也将支持方法引用的静态导入,这在某些情况下也很有用.

所以问题是为什么在Java 8中没有实现这样或类似的语法?这种语法会出现什么问题吗?或者根本不考虑它?

java java-8 method-reference

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

如何从同一签名的方法或扩展函数调用顶级函数?

我用kotlin 1.1.2-2

我想plus100(Int):Int从方法调用顶级函数Mul2.plus100(Int):Int.我尝试在下面的代码中执行此操作,但实际上Mul2.plus100本身也被调用.

class Mul2 {
    fun plus100(v: Int): Int = plus100(2 * v)
}

fun plus100(v: Int): Int = v + 100

fun main(args: Array<String>) {
    val v = Mul2()
    println(v.plus100(10)) // expected: "120", actual: StackOverflowError
}
Run Code Online (Sandbox Code Playgroud)

反正有访问plus100Mul2.plus100

kotlin

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

标签 统计

java ×1

java-8 ×1

kotlin ×1

method-reference ×1