There's a dusty tome out there with regards to why it's done the way it is, but let's specifically look at the declaration of ArrayList.
To put a pin on it: the ability to reduce the verbosity when newing up a generic wasn't in the language back when Java 6 was released.
This is the grammar for declaring a new instance of a reference, back in Java 6.
ClassInstanceCreationExpression:
new TypeArguments (opt) ClassOrInterfaceType ( ArgumentList (opt) )
ClassBody (opt)
Primary. new TypeArguments (opt) Identifier TypeArguments (opt) (
ArgumentList (opt) ) ClassBody (opt)
ArgumentList:
Expression
ArgumentList , Expression
The second production, or more specifically, the TypeArguments token is what is governing what we can put there.
That changes in Java 7, with the introduction of the diamond operator.
ClassInstanceCreationExpression:
new TypeArguments (opt) TypeDeclSpecifier TypeArgumentsOrDiamond (opt)
( ArgumentList (opt) ) ClassBody (opt)
Primary . new TypeArguments (opt) Identifier TypeArgumentsOrDiamond (opt)
( ArgumentList (opt) ) ClassBody (opt)
TypeArgumentsOrDiamond:
TypeArguments
<>
ArgumentList:
Expression
ArgumentList , Expression
So the verbosity no longer needs to be there, thanks to the TypeArgumentsOrDiamond token, but it's still supported by newer versions of Java regardless.
To your example, why we couldn't do something like this:
ArrayList<Object> name = new();
The main thing that springs to mind is, if you want to create an instance of a List, which is an interface and thus can't be instantiated, how would the new() method know which kind of list to pull back? Would it always pull back an ArrayList? A LinkedList? Or one of your own types of lists? How would Java know which one is correct without you telling it?
More directly, what should this produce...
List<Object> name = new();
...if we can choose between ArrayList, LinkedList, or SpecialUtilityList which extends ArrayList?