This means that the keys are case-sensitive and can only be valid Java function names. Is that a reasonable restriction to impose on the connection strings?

It makes me wonder why we allow quoting of key names if we won't allow characters like space, equals, etc.

I would prefer to decouple the details of the string from the Java class. For example, could just have a protected dictionary in this class, and inheriters could have code like:
```java
public String getAField() {
     return this.dictionary.getKey("afield", CaseInsensitive);
}
```