Acho que é por isso que a Sun é tão reticente quanto a sobrecarga de operadores em Java. Se você fizer direitinho, pode ser o céu. Se fizer errado, pode ser o inferno. Aliás, eu vi uma biblioteca para gráficos simples em C++, onde você podia usar uma sintaxe assim:
#include "koolplot.h"
int main() {
Plotdata x(-3.0, 3.0), y = sin(x) - 0.5*x;
plot(x, y);
return 0;
}
Note que ficou uma notação bem matemática e muito limpa. Define-se x e depois y em função de x. Como você falou, nada é como parece. Os operadores criam novos objetos, a função de seno também. Esses objetos são usados pela função plot para efetivamente fazer o cálculo no futuro. O mesmo programa, em java, teria uma sintaxe rebuscada, no mínimo assim:
Plotdata x = new PlotData(-3.0, 3.0), y = PlotData.sin(x).minus(x.multiply(0.5));
plotGraphic.plot(x, y);
Mas enfim… é um recurso que pode ser muito interessante se bem aproveitado (seria legal usar um ArrayList com a mesma notação de um vetor primitivo, tal como o std::vector, ou um map como um “vetor primitivo que aceita objetos no índice” como o std::map), mas certamente pode tornar o código bastante obscuro para quem lê e dá manutenção, especialmente quando os operadores fazem algo bem fora do padrão…
Agora, obscuro por obscuro… é só olhar os códigos esquisitos das fluent interfaces (não para quem usa, mas para quem mantém) e ver que recursos poderosos geralmente exigem programadores, no mínimo, bastante fuçadores. 