Error when binding a field which is not from the current class but from an enclosing class or the current class

Vicente Romero vicente.romero at oracle.com
Sat Sep 29 17:45:10 UTC 2018


thanks!
Vicente

On 09/29/2018 01:21 PM, Remi Forax wrote:
> This code compile but doesn't pass the verifier
>
> import java.util.AbstractList;
> import java.util.ArrayList;
> import java.util.List;
>
> import static java.util.Objects.requireNonNull;
>
> public class StudentList {
>    private final ArrayList<String> list = new ArrayList<>();
>    
>    public void add(String student) -> list.add(requireNonNull(student));
>    
>    public List<String> asList() -> new AbstractList<>() {
>      public int size() = list::size;
>      public String get(int index) = list::get;
>    };
>    
>    public static void main(String[] args) {
>      var students = new StudentList();
>      students.add("John");
>      students.add("Jane");
>      System.out.println(students.asList());
>    }
> }
>
> get() (or size()) is compiled as
> public java.lang.String get(int);
>      Code:
>         0: aload_0
>         1: getfield      #3                  // Field StudentList.list:Ljava/util/ArrayList;
>         4: iload_1
>         5: invokevirtual #5                  // Method java/util/ArrayList.get:(I)Ljava/lang/Object;
>         8: areturn
>
> the owner of getfield should be StudentList$1 not StudentList.
>
> cheers,
> Rémi
>



More information about the amber-dev mailing list