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