Weird generic java types are weird