getKeyType method
Returns the key type for Map-like types.
For Map types, this method returns a ResolvableType representing the key type (the first generic parameter). For non-Map types, this returns ResolvableType.NONE.
Returns:
- ResolvableType representing the key type for Maps
- ResolvableType.NONE if this is not a Map type
Example:
final stringIntMapType = ResolvableType.forClass(Map<String, int>);
final intStringMapType = ResolvableType.forClass(Map<int, String>);
final listType = ResolvableType.forClass(List<String>);
final stringKeyType = stringIntMapType.getKeyType();
print(stringKeyType.resolve()?.getType()); // String
final intKeyType = intStringMapType.getKeyType();
print(intKeyType.resolve()?.getType()); // int
final noKeyType = listType.getKeyType();
print(noKeyType == ResolvableType.NONE); // true
// Useful for Map processing
void processMapType(ResolvableType type) {
final keyType = type.getKeyType();
if (keyType != ResolvableType.NONE) {
final valueType = type.getGeneric([1]); // Second generic parameter
print("Map with keys: ${keyType.resolve()?.getType()}");
print("Map with values: ${valueType.resolve()?.getType()}");
}
}
Implementation
ResolvableType getKeyType() {
if (this == NONE) return NONE;
final resolved = resolve();
if (resolved != null) {
final clazz = Class.forType(resolved.getType());
if (clazz.isAssignableTo(Class.forType(Map))) {
final generics = getGenerics();
if (generics.isNotEmpty) {
return generics[0];
}
}
final keyClass = resolved.keyType();
if (keyClass != null) {
return forType(keyClass.getType(), this);
}
}
return NONE;
}