Noch eine Anmerkung: .. bei selbst definierten Klassen kann es notwendig sein das IComparable-Interface zu Implementieren um 2 Objekte die nicht die selbe Instanz repräsentieren zu vergleichen. In dem Fall kann ansonsten das 1. Beispiel "if(!(new Object[] {B,C,D}).Contains(A))" false liefern, weil die Instanzen verglichen werden.
Du könntest alle Werte die nicht vorkommen sollen in ein Array packen und dann in der if-Abfrage prüfen, ob der Wert der Variable irgendwo in diesem Array vorkommt. Dann müßtest Du halt nur einmal den ganzen Salat aufschreiben und nicht bei jeder if-Abfrage.
Da müßte ich dann ja aber mit ner SChleife das Array durchlaufen? Das wird nicht kompakter, wenn ich erst jedesmal die Werte ins Array packe und dann das in ner schleife durchlaufe
Wenn es jedes Mal unterschiedliche Werte sind, haste da Recht. Die Schleife könnte man sich sparen, wenn man sich eine Funktion baut, wie z.B. in_array() unter PHP.
da es sich um alles handeln kann, also auch um Objekte mit nichttrivialer Vergleichbarkeit, würde ich annehmen, daß es keine simple Lösung dafür gibt - es sei denn, man erzeug jedesmal ein Array, Collection etc. (Dies würde imho dem 'KISS'-Prinzip widersprechen).
Ich könnte mir höchstens Vorstellen, eine Funktion mit variabler Argumentzahl zu bauen und dort jeweils alles reinzuschreiben:
<pseudo>
if( compare_first(A, "different_all", B, C, D) ) { // A ist anders als alle }
if( compare_first(A, "equal_any", B, C, D) ) { // A ist gleich zu irgendeinem }
if( compare_first(A, "less", B, C, D) ) { // A ist am kleinsten }
if( compare_first(A, "greater", B, C, D) ) { // A ist am größten }
Oder so etwa (mit entsprechendem Namen und eventuell Enums statt "Instruktions-Strings"), denn es geht ja darum, den Code übersichtlich und verständlich zu halten.