When I do this, the compiler will complain.
  private Map<String, T> map = new LinkedHashMap<>(16, (float) 0.75, true) {
        @Override
        protected boolean removeEldestEntry(Map.Entry eldest) {
            return size() > capacity;
        }
    };
But when I do these, the compiler will accept it.
private Map<String, T> map = new LinkedHashMap(16, (float) 0.75, true) {
    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > capacity;
    }
};
Or
   private Map<String, T> map = new LinkedHashMap<String, T>(16, (float) 0.75, true) {
        @Override
        protected boolean removeEldestEntry(Map.Entry eldest) {
            return size() > capacity;
        }
    };
The entire code:
public class LRUCache<T> {
    private int capacity;
    private Map<String, T> map = new LinkedHashMap<String, T>(16, (float) 0.75, true) {
        @Override
        protected boolean removeEldestEntry(Map.Entry eldest) {
            return size() > capacity;
        }
    };
}
I know it may be something related to erasure. But I'm confusing about the details.
