ArrayTypeImpl.java
package net.florianschoppmann.java.reflect;
import javax.annotation.Nullable;
import javax.lang.model.type.ArrayType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeVisitor;
import java.util.Objects;
final class ArrayTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, ArrayType {
private final ReflectionTypeMirror componentType;
ArrayTypeImpl(ReflectionTypeMirror componentType) {
Objects.requireNonNull(componentType);
this.componentType = componentType;
}
@Override
public boolean equals(@Nullable Object otherObject) {
if (this == otherObject) {
return true;
} else if (otherObject == null || getClass() != otherObject.getClass()) {
return false;
}
return componentType.equals(((ArrayTypeImpl) otherObject).componentType);
}
@Override
public int hashCode() {
// Do not return just componentType.hashCode() because both this instance and componentType are of type
// ReflectionTypeMirror.
return Objects.hash(getClass(), componentType.hashCode());
}
@Override
public String toString() {
return ReflectionTypes.getInstance().toString(this);
}
@Override
public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
return visitor.visitArray(this, parameter);
}
@Override
public ReflectionTypeMirror getComponentType() {
return componentType;
}
@Override
public TypeKind getKind() {
return TypeKind.ARRAY;
}
}