I am often confrontated with helper or util classes in Java or whatever kind of language. So I was asking myself if this is some kind of Anti Pattern and the existence of these kind of classes is just a lack of missings in the design and architecture of a Software.
Often these classes are confined using just static methods, which do a lot of things. But mostly it is indeed context dependent and statefull.
My question is, what is your opinion about such kind of static helper/util classes because the advantage is of course the fast invocation using just the class name.
And at what kind of abstraction level you would avoid using these kind of classes?
In my opinion the keyword "static" should just be allowed within the declaration of a class (Java) and not for methods. In my opinion is that using it at this way, it could be a good alternative and middleway to be able to combine Procuedural- and OO-Paradigms in Java and avoid missuse of the keyword.
Additions due to the answers:
At first I think that it is completely legal to be able to combine different paradigms and even use runtime interpreted scripting languages within machine or vm compiled code.
My experience is that during the development process of a project such kind of helpers and utils or whatever the name is, are growing and growing and used within every forgotten corner of the codebase, which was originally designed to be modular and flexibel. And due to a lack of time to make refactorings or think about the design again you just make it much worse over the time.
static should be removed from Java. Especially now where it is possible to use even more sophisticated functional language elements.