generische methode <T> void .

Status
Nicht offen für weitere Antworten.

dermoritz

Bekanntes Mitglied
ich hab in meinem code ein unchecked type warning und würde die gerne wegkriegen. z.b. mit generics?
es funzt aber irgendwie nicht

um es kurz zu machen das ganze mal in pseudo code

Code:
void <T> methode (par){
if (irgendwas){
 ab hier würde der typ feststehen-> t=typ (wie sage ich z.b. type= double?)
 var_irgendwas=map<string, T>
}
 
else{
 var=map<string, T>
}

folgendes funktioniert dann leider nicht (can't cast (typ vom blabla...) to T)
iterator<T> it =null;
if (irgendwas){
 it = blabla_irgendwas.iterator
}
else{
 it = blbla.iterator

}
}


wie gesagr alternativ ohne <T> geht es bis auf eine type unchecked warning wenn man dann iterator.next() auf was casten will. das muss doch aber irgendwie gehen mit generics?
(wenn nötig poste ich auhc den source code der methode)
 
S

SlaterB

Gast
T wird vom Aufrufer festgelegt und kann in der Methode nicht verändert werden,

zum Rest kann man nix sagen wenn du keinen richtigen Code postest,
hat aber wahrscheinlich mit vorherigem Problem zu tun
 

dermoritz

Bekanntes Mitglied
heißt das, dass man mindestens einen parameter in der methode haben muss der <T> verwendet? in meinem fall ist es eben ein bool flag der den typ festlegt.

theoretisch könnt eich auch 2 methoden basteln und je nach flag die methode auswählen, aber das is ja auch nich das gelbe vom ei.

ich pack hier mal den code rein:
Code:
	private void catchMarkedElements(Element tcElement) {
		if (with_time) {
			timed_analysis = new HashMap<String, List<TimedWord>>();
			timed_manipulation = new HashMap<String, List<TimedWord>>();
		} else {
			analysis = new HashMap<String, List<BigDecimal>>();
			manipulation = new HashMap<String, List<BigDecimal>>();
		}
		String marked_true = tcElement.getAttributeValue("marksTrue");
		// iterator over all marked equivalence classes (including output classes)
		Iterator<String> marked_true_it = Arrays.asList(marked_true.split(" ")).iterator();
		// look for each pid in input signals and output signals
		while (marked_true_it.hasNext()) {
			String pid = (String) marked_true_it.next();
			// first look for inout signal with curren pid
			Iterator<?> input_signals = null;
			if (with_time) {
				input_signals = timed_classes.entrySet().iterator();
			} else {
				input_signals = valid_classes.entrySet().iterator();
			}
			Object signal_value = null;
			while (input_signals.hasNext()) {
				if (with_time) {
					Entry<String, Map<String, TimedWord>> input_signal = (Entry<String, Map<String, TimedWord>>) input_signals.next();
					signal_value = input_signal.getValue().get(pid);
					//clear all timed words
					input_signal.getValue().clear();
					//put in the chosen one
					input_signal.getValue().put(pid, (TimedWord) signal_value);
				}
				else {
					Entry<String, Map<String, BigDecimal>> input_signal = (Entry<String, Map<String, BigDecimal>>) input_signals.next();
					signal_value = input_signal.getValue().get(pid);
					//clear all timed words
					input_signal.getValue().clear();
					//put in the chosen one
					input_signal.getValue().put(pid, (BigDecimal) signal_value);
				}
			}
			//if signal value = null try to find the pid in output signals
			if (signal_value == null) {
				
			}
		}
	}

der flag ist "with_time", die unchecked warnings kommen im while. mit dem with_time ist der typ entweder "TimedWord" oder "BigDecimal".
das
Code:
Object signal_value = null;
um später (am ende) das zu machen:
Code:
if (signal_value == null)

find ich auch nicht besonders toll.
 
S

SlaterB

Gast
> heißt das, dass man mindestens einen parameter in der methode haben muss der <T> verwendet?

ja,

ansonsten kann ich keine Frage erkennen, mit
Iterator<?> input_signals
und if/ else kannst du aber nur mit Warnings noch zufrieden sein,

dann doch lieber ein T-Parameter,
kannst ja von außen nur einen boolean anbieten, und die sichtbare Methode ruft dann eine andere private auf entweder mit BigDecimal oder TimedWord
 

dermoritz

Bekanntes Mitglied
wie sehe das denn mit T-parameter aus? ich muss ja wirklich nur den typ übergeben?
die methode operiert ja auf klassen attributen und je nach dem flag werden halt verschiedene manipuliert verschiedenen typs.
diese manipulation ist aber die gleiche.
 
S

SlaterB

Gast
Code:
    public void doX(boolean x)
    {
        if (x)
        {
            doX("");
        }
        else
        {
            doX(BigDecimal.ZERO);
        }
    }

    private <T>void doX(T t)
    {
        List<T> list = new ArrayList<T>();
        Iterator<T> it = list.iterator();
    }

die Zuweisung an Klassenattributen ist davon natürlich wenig betroffen, das musst du weiter mit boolean-Flag + if/ else machen

evtl. kürzer per
Code:
      Map a = ..;
      Map b = ..;
      if (with_time) {
         timed_analysis = a;
         timed_manipulation = b;
      } else {
         analysis = a;
         manipulation = b;
      }
aber das dürfte wieder Warnings geben

-------
zumindest die zwei Blöcke Zeile 25-40 scheint nicht von denen abzuhängen
und könnten zusammengefasst werden
 

dermoritz

Bekanntes Mitglied
ich glaub das gefällt mir, das sollte den doppelten code minimieren. nur die konkreten zuweisungen muss ich in if und else trennen.

also danke
 

dermoritz

Bekanntes Mitglied
mir fällt grad ein: so hatte ich es schon probiert und es funktioniert aus folgendem grund nicht bzw. macht es die sache nicht besser:

die meisten dieng die ich mache funktionieren nur auf dem einen oder anderen typ. das heißt es funktioniert nicht wenn ich dort mit typ T anrücke. dann würde immer kommen "can not cast T to TimedWord/BigDecimal".

der compiler weiß ja nicht was T ist.
in meinem fall würde ich anstelle iterator<?> iterator<T> schreiben, kann diesem dann aber nicht etwas von einem anderen typ unterschieben.
du machtst ja eine neue liste ich muss aber über eine alte mit einem festen typ iterieren.

wobei der typ t ja nur der innerste typ einer komplexen collection klasse ist. aber genau deshalb dachte ich, ich kann alles generalisieren add/put usw sind ja collection funktionen.

naja ich lass es erstmal wie es ist...
 
G

Guest

Gast
Warum so umständlich mit den Arrays zu Listen, dann über Iterator und so weiter? Das ist kaum leserlich.
Code:
...

if(with_time) {
   for(String pid : marked_true.split(" ")) { // Voraussetzung: "marked_true" muss nicht geprüft werden, enthält keinen Unsinn
      processSignals(timed_classes, pid);
   }
}
else {
   for(String pid : marked_true.split(" ")) { // Voraussetzung: "marked_true" muss nicht geprüft werden, enthält keinen Unsinn!
      processSignals(valid_classes, pid);
   }
}

oder von mir aus (kürzer, aber unnötige, mehrfache Prüfung von 'with_time')

for(String pid : marked_true.split(" ")) { // Voraussetzung: "marked_true" muss nicht geprüft werden, enthält keinen Unsinn!
   if(with_time) {
      processSignals(timed_classes, pid);
   }
   else {
      processSignals(valid_classes, pid);
   }
}


private <T> void processSignals(Map<String, Map<String, T>> signalMap, Strind pid) {
   for(Map.Entry<String, Map<String, T>> inputSignal : signalMap.entrySet()) {
      T signalValue = inputSignal.getValue().get(pid); // Voraussetzung: inputSignal.getValue() ist nie null!
      inputSignal.getValue().clear();
      inputSignal.getValue().put(pid, signalValue);
   }
}
 
G

Guest

Gast
Noch kürzer
Code:
private <T> void processSignals(Map<String, Map<String, T>> signalMap, Strind pid) {
   for(Map<String, T> map : signalMap.values()) {
      T signalValue = map.get(pid); // Voraussetzung: inputSignal.getValue() ist nie null!
      map.clear();
      map.put(pid, signalValue);
   }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
B Generische Methode Java Basics - Anfänger-Themen 2
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
H Statische generische Methode Java Basics - Anfänger-Themen 2
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
I Generische Funktion Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
H Generische Konstruktor Java Basics - Anfänger-Themen 12
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
O Generische Typen Java Basics - Anfänger-Themen 9
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
D Generische Typen Java Basics - Anfänger-Themen 20
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
L Generische Liste Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
M Generische Liste Java Basics - Anfänger-Themen 4
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
A Generische Datentypen Java Basics - Anfänger-Themen 8
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
L Generische Containerklasse Java Basics - Anfänger-Themen 9
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
L Generische ArrayList, CastProblem Java Basics - Anfänger-Themen 2
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
W Generische Klassen Java Basics - Anfänger-Themen 3
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
J array über generische arraylist Java Basics - Anfänger-Themen 7
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
J Generische Methoden Java Basics - Anfänger-Themen 6
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60

Ähnliche Java Themen

Neue Themen


Oben