Typeinschränkung bei Generics

nossek

Aktives Mitglied
Hallo,

ich möchte eine generische Klasse schreiben, wobei als Typ nur Klassen erlaubt sein sollen, die von Number erben (Integer, Byte ...).

Das scheint so zu funktionieren:
Java:
public class RandSeq<T extends Number> {

gerne würde ich als Typ noch die Klasse Character erlauben. Geht das und wenn ja wie?

Danke, Gruß
 

nrg

Top Contributor
mehrere interfaces könntest du mit & verbinden aber nachdem Character kein Interface ist, ka... hilft dir jetzt bestimmt auch nicht wirklich weiter ;)
 

icarus2

Top Contributor
Ich lehne mich nun mal etwas weit aus dem Fenster uns sage, dass das nicht geht.

Grund:
[Java]
public class RandSeq<T extends Number & Character> { //... }
[/Java]
wäre nicht wirklich sinnvoll. Du könntest dann nur Objekte, die von Number UND Character erben als Parameter verwenden. Mehrfachvererbung ist in Java ja nicht erlaubt. Deswegen gibt es gar keine solche Objekte.


Der einzige Ausweg ist über eine gemeinsame Basisklasse. Wenn ich mich recht erinnere erben Number und Character direkt von Object. Also ist es unmöglich die Typen so einzuschränken, wie du das gerne möchtest.
 
T

Tomate_Salat

Gast
wäre soetwas eine option?
Java:
class RandSeq<T>
{
	private RandSeq() {}
	
	public static <T extends Number> RandSeq<T> createRand(Class<T> clazz)
	{
		return new RandSeq<T>();
	}
	
	public static RandSeq<Character> createRand() 
	{
		return new RandSeq<Character>();
	}
}
[c]RandSeq<Integer> intRand = RandSeq.createRand(Integer.class);[/c]
 
Zuletzt bearbeitet von einem Moderator:

nossek

Aktives Mitglied
Danke für die Antworten!

Kann man denn die Typisierung einer generischen Klasse erzwingen, sodaß
Java:
MeineArrayList<Integer> array;
erlaubt ist,
Java:
MeineArrayList array;
aber nicht?

und:
wie kann man innerhalb der Methoden/Konstruktoren einer generische Klasse den Typ herausbekommen? T.getClass() geht nicht. Wenn ein Objekt der Klasse T an eine Methode der generischen Klasse als Argument übergeben worden ist kann man die Klasse dieses Objektes mit .getClass rausfinden. Das geht aber eben nicht immer...

Man könnte ja vielleicht gleich im Konstruktor checken, ob der Typ zu den erlaubte Typen gehört, und wenn nicht eine Excepton werfen.
 

shiroto

Mitglied
Ich hab keine Ahnung was genau du machen willst, aber du könntest die Typen einschränken indem du eine Klasse machst die einfach 2 ArrayLists mit den jeweiligen Typen verwaltet und funktionen auf beide bereitstellt. Also sowas in der Art:
Java:
public class NumbersAndCharacters {
	private ArrayList<Number> numbers;
	private ArrayList<Character> characters;
	
	public void add(Number n) {
		numbers.add(n);
	}
	
	public void add(Character c) {
		characters.add(c);
	}
}
 

Marco13

Top Contributor
AFAIK kann man die Typisierung nicht erzwingen (Außer mit entsprechenden Flags in der IDE, "Treat Warnings as Errors" o.ä.)

Den generischen Typ herauszubekommen ist zur Laufzeit nicht möglich. Zur Laufzeit steht da überall nur noch "Object".
 

nossek

Aktives Mitglied
@Tomate_Salat:
muß gestehen daß ich Dein Konstrukt nicht verstehe :oops:

@shiroto
bei Deinem Vorschlag sehe ich 3 Probleme:
1. könnte die erste ArrayList ja Objekte verschiedener Number-Klassen enthalten. Es soll aber bei der Erzeugung eines Objekts eben festgelegt werden "nur Integer" oder "nur Double"...
(wenn keine Typisierung im Sinne von MeineArrayList<Integer> array; erzwungen werden kann, ist das wohl eh nicht auszuschließen)
2. Zwei ArrayLists obwohl man nur eine braucht: ist das nicht unnötiger Ballast? (zumal: es soll entweder für Numbers oder für Characters gehen, so ginge aber beides)
3. Müsste man ja ohnehin alle Methoden zweimal schreiben, sollte man da nicht besser gleich zwei Klassen schreiben, eine generische für Erben von Number, eine für Character.

Mir scheint (angesichts eurer Antworten und der Aussage von Marco13):
Java:
AFAIK kann man die Typisierung nicht erzwingen (Außer mit entsprechenden Flags in der IDE, "Treat Warnings as Errors" o.ä.)
Den generischen Typ herauszubekommen ist zur Laufzeit nicht möglich. Zur Laufzeit steht da überall nur noch "Object".
das was mir vorschwebte ist wohl nur durch Umwege zu machen, die den Code nicht eben vereinfachen (was ja die wohl Idee von Generics sein soll)

Habe aber noch eine andere Idee, werde das gleich mal versuchen...
 

nrg

Top Contributor
shiroto's beispiel ist imho quatsch bzw. hat nichts mit deinem Problem zu tun. generics hat nicht ausschließlich mit collections zu tun...

würde Tomate_Salat's Beispiel nehmen. Was verstehst du denn daran nicht?`Du hast halt einen privaten Konstruktor und erzeugst Instanzen der Klasse RandSeq eben nicht mit dem idR öffentlichen Konstruktor sondern der Methode createRand.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
MarvinsDepression Datentypen Generics: Erste Berührungen Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
L Generics Tripel Java Basics - Anfänger-Themen 26
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Array Generics Java Basics - Anfänger-Themen 3
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
C Generics Array Java Basics - Anfänger-Themen 43
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
N Generics und Interfaces Java Basics - Anfänger-Themen 5
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
S Generics und Typerkennung Java Basics - Anfänger-Themen 7
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35
O Abstract Method & Generics Java Basics - Anfänger-Themen 10
K Aufgabe Generics Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben