I think most people would rate Rust as being closer to Haskell than Java at the type level.
Rust traits are very much like Haskell type classes. Java gives you classic OOP, but neither Rust nor Haskell do.
Rust generics are much more like Haskell generics than Java generics. Rust and Haskell both have associated types, Java doesn't. Java generics are crippled due to type erasure; Rust and Haskell don't have those limitations.
Rust and Haskell generics support a lot of type-level computation; Java doesn't.
Rust and Haskell don't have ubiquitous nullable-by-default values; Java does.
Rust and Haskell have discriminated sum types; Java doesn't.
The only way I think Rust is more like Java than Haskell at the type level is that Haskell has higher-kinded types and Rust/Java don't. There are plans to fix this in Rust though.
In this context "type erasure" means that Java compiles all instances of a generic method to a single implementation that is oblivious to the type parameters. Thus in Java you can't write "T t = new T()" where T is a generic parameter, because the type-erased code doesn't know what T to create.
In Rust, each instance of a generic function is compiled separately and customized as necessary to the specific type parameters. You can write "let t = T::new();" because the compiler will generate a call to the correct constructor for each instance of the generic code. In this sense, types are NOT erased.
Rust traits are very much like Haskell type classes. Java gives you classic OOP, but neither Rust nor Haskell do.
Rust generics are much more like Haskell generics than Java generics. Rust and Haskell both have associated types, Java doesn't. Java generics are crippled due to type erasure; Rust and Haskell don't have those limitations.
Rust and Haskell generics support a lot of type-level computation; Java doesn't.
Rust and Haskell don't have ubiquitous nullable-by-default values; Java does.
Rust and Haskell have discriminated sum types; Java doesn't.
The only way I think Rust is more like Java than Haskell at the type level is that Haskell has higher-kinded types and Rust/Java don't. There are plans to fix this in Rust though.