小编xia*_*.li的帖子

为什么尝试使用内部类中的方法引用来调用超类的受保护方法时出现BootstrapMethodError?

在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)

我的问题是,为什么在正常方法调用可以访问超类方法的情况下,方法引用在这种情况下无法工作 …

java java-8

13
推荐指数
1
解决办法
488
查看次数

使用placement new来更新引用成员?

以下代码在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

3
推荐指数
1
解决办法
307
查看次数