java8函数参考IllegalAccessError

时间:2016-08-05 01:37:03

标签: java java-8

import java.util.*;

public class bigjavach1p7balprob{
  public static void main(String[] args){
    int balance = 10000;
    int year = 0;

    while (balance < 20000){
      year += 1;
      double interest = (double)balance * .05;
      balance = Integer.parseInt(balance) + interest;

      System.out.println("year " + year + ": " + balance);

    }
  }
}

控制台

Function<StringBuilder,Integer> function = StringBuilder::length;
System.out.println(function.apply(new StringBuilder("abcd")));
问题重新解决!!! jdk bug https://bugs.openjdk.java.net/browse/JDK-8162779

2 个答案:

答案 0 :(得分:1)

看起来它正在尝试访问AbstractStringBuilder,即实现length方法的类,但它具有本地可见性。

您可以通过反思更改它,但解决此问题的最简单方法是将代码更改为:

Function<StringBuilder,Integer> function = sb -> sb.length();
System.out.println(function.apply(new StringBuilder("abcd")));

答案 1 :(得分:1)

StringBuilder扩展了AbstractStringBuilder。 如果对StringBuilder :: length使用方法引用,那么它将引用AbstractStringBuilder.length()。 并且因为AbstractStringBuilder具有默认访问修饰符,所以它不能从默认包(java.lang)外部访问,因此它将抛出该错误