1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.lang.reflect; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 217281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * A pattern type, such as the upper bounded wildcard {@code 227281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * ? extends Closeable} or the lower bounded wildcard {@code ? super String}. 23f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 247281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <p>Although this interface permits an arbitrary number of upper and lower 257281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * bounds, all wildcard types of Java language programs are in one of two forms: 267281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <ol> 277281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <li><strong>No lower bound and one upper bound.</strong> Such types are 287281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * written like {@code ? extends java.lang.Number}. When the upper bound is 297281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * {@code java.lang.Object}, the {@code extends java.lang.Object} suffix is 307281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * optional: {@code Set<?>} is shorthand for {@code 317281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * Set<? extends java.lang.Object>}. 327281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * <li><strong>One lower bound and an upper bound of {@code 337281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * java.lang.Object}.</strong> Such types are written like {@code 347281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * ? super java.lang.String}. 357281ea4092279f3091ffa3be91a4c66c3b63e080Jesse Wilson * </ol> 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic interface WildcardType extends Type { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the array of types that represent the upper bounds of this type. 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The default upper bound is {@code Object}. 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an array containing the upper bounds types 43f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws TypeNotPresentException 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if any of the bounds points to a missing type 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MalformedParameterizedTypeException 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if any bound points to a type that cannot be instantiated for 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * some reason 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] getUpperBounds(); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the array of types that represent the lower bounds of this type. 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The default lower bound is {@code null}, in which case an empty array is 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returned. Since only one lower bound is allowed, the returned array's 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * length will never exceed one. 57f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an array containing the lower bounds types 59f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws TypeNotPresentException 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if any of the bounds points to a missing type 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws MalformedParameterizedTypeException 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if any of the bounds points to a type that cannot be 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * instantiated for some reason 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Type[] getLowerBounds(); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 68