public Key(Type type,Annotation[] anns){
  Objects.requireNonNull(type);
  _type=type;
  _anns=anns;
  if (anns == null || anns.length == 0) {
    _annTypes=DEFAULT_ANN_TYPES;
    return;
  }
  ArrayList<Class<? extends Annotation>> annTypeList=new ArrayList<>();
  for (  Annotation ann : anns) {
    if (isQualifier(ann.annotationType())) {
      annTypeList.add(ann.annotationType());
    }
  }
  if (annTypeList.size() == 0) {
    _annTypes=DEFAULT_ANN_TYPES;
    return;
  }
  Class<? extends Annotation>[] annTypes=new Class[annTypeList.size()];
  annTypeList.toArray(annTypes);
  _annTypes=annTypes;
}

public Key ( Type type , Annotation [ ] anns ) { Objects . requireNonNull ( type ) ; _type = type ; _anns = anns ; if ( anns == null || anns . length == 0 ) { _annTypes = DEFAULT_ANN_TYPES ; return ; } ArrayList < Class < ? extends Annotation > > annTypeList = new ArrayList < > ( ) ; for ( Annotation ann : anns ) { if ( isQualifier ( ann . annotationType ( ) ) ) { annTypeList . add ( ann . annotationType ( ) ) ; } } if ( annTypeList . size ( ) == 0 ) { _annTypes = DEFAULT_ANN_TYPES ; return ; } Class < ? extends Annotation > [ ] annTypes = new Class [ annTypeList . size ( ) ] ; annTypeList . toArray ( annTypes ) ; _annTypes = annTypes ; }
constructs key with a given type and annotations
