package me.tomassetti.symbolsolver.javaparser;

import java.util.Optional;
import java.util.List;
import java.util.Arrays;

public final class Generics {

    Optional<String> s;
    Optional<Integer> i;
    Optional<Generics> g;

}

public final class SomeCollection<A> {

    public A a;
    public List<A> as;

    public void foo1(){
        new SomeCollection<String>().a;
    }

    public void foo2(){
        new SomeCollection<String>().as;
    }

    public List<Long> foo3(){
        return Arrays.asList(new Long[]{1L,2L});
    }

}
