Java的方法引用
CartVO::getItemId 与 CartVO.getItemId 看起来只差一个冒号,但一个是 Java 8 的方法引用,另一个在 Java 语法里根本不能这么写。它们完全不是同一回事。
| 写法 | 含义 | 合法吗 | 出现在哪 |
|---|---|---|---|
CartVO::getItemId | 方法引用,指向 实例方法 getItemId() | ✅ 合法 | 只能出现在 函数式接口 的上下文中(如 stream().map(...)) |
CartVO.getItemId | 试图像静态方法一样调用实例方法 | ❌ 非法 | 编译直接报错:non-static method getItemId() cannot be referenced from a static context |
举个对比例子
// 正确:方法引用
Stream<Long> ids = vos.stream().map(CartVO::getItemId);// 错误:编译失败
Stream<Long> ids = vos.stream().map(CartVO.getItemId); // ❌
一句话总结
CartVO::getItemId是 方法引用,告诉编译器“以后碰到CartVO对象,就调它的getItemId()实例方法”。CartVO.getItemId是 错误语法,因为getItemId不是静态方法,不能用类名直接调用。
