在Java 8,给出一个超类Super的包a和一个子类Sub的包b,谁拥有一个内部类SubInner:
// Super.java
package a;
public abstract class Super {
private long value;
protected final void setValue(long value) {
this.value = value;
}
}
//Sub.java
package b;
public class Sub extends Super {
public void foo() {
new SubInner().foo();
}
private class SubInner {
void foo() {
Optional.of(1L).ifPresent(Sub.this::setValue); // Will throw IllegalAccessError at runtime.
Optional.of(1L).ifPresent(t -> setValue(t)); // However, lambda works.
setValue(1L); // also works.
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么在正常方法调用可以访问超类方法的情况下,方法引用在这种情况下无法工作 …
以下代码在C++中是否合法?
template<typename T>
class Foo {
public:
Foo(T& v) : v_(v) {}
private:
T& v_;
};
int a = 10;
Foo<int> f(a);
void Bar(int& a) {
new (&f)Foo<int>(a);
}
Run Code Online (Sandbox Code Playgroud)
引用不应该被绑定两次,对吧?
c++ reference placement-new object-lifetime reference-binding