Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public class Generics
{
public <T extends A & B> void bla(T data)
{
data.inA();
data.inB();
}
}
interface A
{
public void inA();
}
interface B
{
public void inB();
}
Du kannst ein weiteres Interface erstellen, welches von den anderen beiden erbt:
Java:
private interface A
{
void a();
}
private interface B
{
void b();
}
private interface AB extends A, B
{
@Override
public void a();
@Override
public void b();
}
(ot: Kann man hier von Vererbung sprechen? Oder lieber Erweiterung?)
die einzigste Lösung die funktioniert ist die von Tomate_Salat und die ist ziemlich krank =D Danke!!
Ihr andern habt die Frage nicht ganz verstanden!
"Ich kann diese Klassen, welche die Interfaces implementieren nicht verändern!" Mir bringt ein neues Interface überhaupt nichts da ich die Klasse nicht verändern kann!
Bsp:
Java:
//Feste Klassen und Interfaces
public class W implements A { }
public class X implements B { }
public class Z implements A, B { }
//Wenn ich nun so etwas mache
public interface AB extends A, B {}
//bringt mich das nicht weiter weil die Klasse Z zwar A,B implementiert aber nicht AB
//=>das geht nicht:
//meinemethode(AB obj);
meinemethode(Z);
Juhu gewonnen :lol: . Was heist den hier Krank ;-). Dafür sind Sie da, zudem bist du ziemlich Flexibel mit dem ganzen. Und btw wäre auch soetwas gegangen:
Java:
public void bla(Object blubb)
{
A a = (A) blubb;
Helper helper= (Helper) blubb;
AB ab= (AB) blubb;
}
Insofern wären die Vorgänger iwie doch möglich gewesen ;-)
public class Generics<T extends A & B>
{
private T ref;
public void bla(T data)
{
data.inA();
data.inB();
}
}
anderster wüsste ich es spontan auch nicht, kenne Generics nur aus eigenem Interesse und habe Sie bisher noch nie (in eigenen Methoden/Klassen) gebraucht. (also abgesehen von List<Object> o.ä.)
Edit oder eben als Object:
Java:
public class Generics
{
private Object ref;
public <T extends A & B> T getT()
{
return (T) ref;
}
public <T extends A & B> void bla(T data)
{
ref = data;
}
[c]private Object ref; [/c]
hier ist deine Referenz als Objekt gespeichert, du musst erst wieder auf die Klasse/das Interface casten, mit dem du arbeiten willst. Ansonsten ists ja klar, dass er nur die Methoden von Object kennt :-/