Can we just simplify this and require the two types agree?

```
public DeclaredType name = new DeclaredType() {
```

I don't think it causes any problems. The theoretical problem is that you end up with this:
```
public AbstractList<String> = new AbstractList<String>() {
```
instead of this:
```
public List<String> = new AbstractList<String>() {
```