TL;TR
It depends!
Erstmla kurz zum Terminus: Die Klassen die du meinst schimpfen sich UtilityClass oder HelperClass. Es sind Strukturen, die nur statische Methoden haben und keinen State kapseln, also nicht Instanziert werden um Daten zu gruppieren und zu schützen. Sie bieten allgemeine Funktionen, die überall gebraucht werden können.
Sie entstehen oftmals, wenn man das DRY-Prinzip verfolg.
Es gibt viele Build-In Classes die dieses Konzept verfolgen, z. B. die Math-Class. Entsprechend können sie nicht so schlecht sein, oder etwa doch?
Da ich weiß, dass du versucht dich in der Welt von OOP zurecht zu finden, bezieht sich meine Antwort auch auf OOP.
Nimmt man die Meinungen, die an in Fachliteratur in Blogs von Entwicklern zu dem Thema gefunden werden können, zusammen erhält man etwa die Aussage, dass diese Klassen in den meisten Fällen von einem schlechten Stil zeugen.
Die Begründung ist, dass diese Klassen nicht in dem Konzept der objekt-orientierten Welt passen. Stattdessen sind sie ein Überbleibsel der prozeduralen Programmirung.
Allerdings wird auch an einigen Stellen betont, dass es nicht gut ist Objekte zu erstellen, ohne das diese einen Zustand haben.
Oft ist man der Meinung, dass eine Funktion so generisch ist, dass sie zu keiner Klasse passt, doch am Ende verwendet man sie genau an einer, oder vllt zwei Stellen. Es passiert auch oft, dass eine Methode, bei genaueren hinschauen, zwei untershiedliche Sachen macht, die zu zwei unterschiedlichen Klassen gehören.
Kurz: Die meistene Methoden sind speziell genug, um sie einem Objekt zuordnen zu können.
Im Allgemeinen kann man aber bei OOP jede Methode, auch statische Methoden, eine Klasse zuweisen. Da ist es dann auch in Ordnung, wenn sie Input und Output haben und nichts an einem Zustand verändern diese Methoden statisch zu machen. Ein Beispiel dafür sind z. B. Methoden die ein Objekt parsen und dabei ein anderes Objekt zurück geben, ohne den Input zuverändern.
Ich persönlich habe eine sehr große Abneigung gegen Util-Classes. Und der Grund ist ganz einfach: Erfahrung.
Bei uns auf der Arbeit wurde von einer Abteilung vor etwa 6 Jahren ein Projekt eröffnet, das im Namen "Util" hat. In dieses Projekt wurden alle Funktionen reingepackt, die sie meinten in mehreren Projekten verwenden zu können oder schlicht nicht direkt im Code haben wollten. Nach gerade mal zwei Jahren dauerte ein Build dieses Projekts über 6 Stunden und keiner hatte einen Überblick was das Projekt alles beherbergt hat. Viele andere Kollegen erstellen ebenfalls ihre "privaten" Util-Klassen, wo keiner von was weiß und die Funktionen werden meist nur in einem Projekt und an einer Stelle verwendet.
Ich selbst versuche Util-Klassen zu vermeiden. An manchen Stellen kommt man allerdings nicht drum herum (oder ich bin zufaul mir was schöneres zu überlegen und versehe die Klasse mit einem //Todo).
Doch sobald eine Klasse ein "General", "Util", "Helper", oder "Common" (nur Beispiele) im Namen hat, gehen bei mir die Alarmglocken an und ein leichte Gefühl von Übelkeit überkommt mich.
Du kannst gerne ein paar deiner Methoden, die du einer Util-Klasse zuweisen würdest hier posten, zw die Util-Klasse selbst. Dann können wir diese gemeinsam auflösen.