question on type annotations in lambda expression

Steve Sides steve.sides at oracle.com
Wed Mar 6 11:39:40 PST 2013


Hi Werner,
I have a question on type annotations in lambda expressions.
Are these not analogous in their annotations? One is a local class and 
another a local class in a lambda expression.
Only the type-annotations show up in the lambda expression.

In T14$1inner there are 2 TypeAnnotations and 2 Annotations.
   java.lang.Class<?> icc;
     descriptor: Ljava/lang/Class;
     flags:
     Signature: #10                          // Ljava/lang/Class<*>;
     RuntimeVisibleAnnotations:
       0: #12()
       1: #13()
     RuntimeVisibleTypeAnnotations:
       0: #12(): FIELD
       1: #13(): FIELD

In T14l$1inner(lambda expression) there are 2 TypeAnnotations and 0 
Annotations.
   java.lang.Class icc;
     descriptor: Ljava/lang/Class;
     flags:
     RuntimeVisibleTypeAnnotations:
       0: #10(): FIELD
       1: #11(): FIELD

source:

import java.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.*;
import static java.lang.annotation.ElementType.*;
import java.util.List;
import java.util.ArrayList;

class T14{
     void test() {
           class innerClass   {
               @A @B Class<?> icc; //2 Ann, 2 TypeAnn
               innerClass(Class<?> _c) { icc = _c; } //2 TypeAnn
               String getString() { return icc.toString(); } //2 
Ann,2TypeAnn
           }
          String s = new innerClass(T14.class).getString();
          System.out.println(s);
     }
}

//Source2:
class T14l{
     interface MapFun<T, R> {  R m( T n); }
     MapFun<Class<?>,String> cs;

     void test() {
         cs = c -> {
                  class innerClass   {
                      @A @B Class<?> icc; //2 Ann, 2 TypeAnn
                      innerClass(Class<?> _c) { icc = _c; } //2 TypeAnn
                      String getString() { return icc.toString(); } //2 
Ann,2TypeAnn
                  }
                  return new innerClass(c).getString();
         };
         System.out.println("cs.m : " + cs.m(Integer.class));
     }
}

// annotations
@Retention(RUNTIME) 
@Target({TYPE_USE,TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE}) 
@Repeatable( AC.class ) @interface A { }
@Retention(RUNTIME) 
@Target({TYPE_USE,TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE}) 
@interface AC { A[] value(); }
@Retention(RUNTIME) 
@Target({TYPE_USE,TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE}) 
@Repeatable( BC.class ) @interface B { }
@Retention(RUNTIME) 
@Target({TYPE_USE,TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE}) 
@interface BC { B[] value(); }


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/type-annotations-dev/attachments/20130306/25da3b4c/attachment.html 


More information about the type-annotations-dev mailing list