package org.etk.reflect.core; import java.util.ArrayList; import java.util.List; import org.etk.reflect.api.TypeInfo; class WildcardTypeInfoImpl<T, M, A, P, F> extends AbstractWildcardType<T, M, A, P, F> { /** . */ private final T wildcardType; /** . */ private List<TypeInfo> upperBounds; /** . */ private List<TypeInfo> lowerBounds; public WildcardTypeInfoImpl(TypeResolverImpl<T, M, A, P, F> domain, T wildcardType) { super(domain); // this.wildcardType = wildcardType; } public T unwrap() { return wildcardType; } public List<TypeInfo> getUpperBounds() { if (upperBounds == null) { List<TypeInfo> upperBounds = new ArrayList<TypeInfo>(); for (T upperBound : domain.typeMetadata.getUpperBounds(wildcardType)) { upperBounds.add(domain.resolve(upperBound)); } this.upperBounds = upperBounds; } return upperBounds; } public List<TypeInfo> getLowerBounds() { if (lowerBounds == null) { List<TypeInfo> lowerBounds = new ArrayList<TypeInfo>(); for (T lowerBound : domain.typeMetadata.getLowerBounds(wildcardType)) { lowerBounds.add(domain.resolve(lowerBound)); } this.lowerBounds = lowerBounds; } return lowerBounds; } }