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