SuppressWarnings: CallToThreadDumpStack

Nodiraa

Mitglied
Hallo zusammen,

ich beschäftigte mich mit einem Java-Projekt zur Datenanonymisierung. Leider haben die ursprünglichen Programmierer es nicht für wichtig gehalten irgendetwas zu kommentieren.

Meine Frage dreht sich nun um die SuppressWarnings. Dazu folgender Code:

Java:
  @SuppressWarnings({"OverridableMethodCallInConstructor", 
      "CallToThreadDumpStack"})
public Anonymisation(int sz, String f)
  {
      //Datengröße wird gesetzt
    this.data_size = sz;
    //Größe des HashMaps
    this.treenodes = new HashMap(300);
    //instanzierung von DataManager
    this.dataManager = new DataManager(f);

    //generiert Zufallsdaten???
    this.dataManager.random_data(sz);
    try
    {
      String output_file = "C:/Dokumente und Einstellungen"
              + "/Eigene Dateien/anon_export.csv";
      this.dataManager.create_file(this.dataManager.getDataSet(), 
              output_file);
    } catch (IOException ioe) {
      ioe.printStackTrace();
    }
    if (this.searchStrategy == null)
      setSearchStrategy(SearchStrategy.createStrategy
              (this.default_strategy));
  }

im try/catch block wird eine Datei erzeugt. Aber was bedeutet nun diese Warnung? Laut API hat sie was mit der Methode printStackTrace zu tun. Ist das die Meldung, wenn die zu erstellende Datei nicht erstellt werden kann?

Die andere Warnung (overridable...) bezieht sich auf setSearchStrategy. Das ist ein Setter einer anderen Klasse (auch anderes package). Kann dabei irgendwas schief gehen? Sprich: warum meckert der Compiler?

Wie immer schon mal Danke im Voraus.
 

XHelp

Top Contributor
setSearchStrategy ist kein Setter einer anderen Klasse, sonst würde es ja
Code:
andereInstanz.setSearchStrategy(
heißen. Und dem Compiler meckert eben, dass es ggf zu einem Fehler führen kann. Du kannst ja erben und die Methode überschreiben. Der Konstruktor würde dann etwas völlig anderes machen.
Die erste Meldung hat eher was mit dumpStack()-Methode zu tun:
javadocs hat gesagt.:
Prints a stack trace of the current thread. This method is used only for debugging
Und auf den 2. Teil weist dich der Compiler hin.

Aber alles eher meine Vorstellung, denn ich habe die Warnungen selber noch nie gesehen.
 

Nodiraa

Mitglied
Hi zusammen,

erstmal Danke für die schnellen Antworten.

Ich habe mich wohl ungeschickt ausgedrückt. Dass die Warnungen unterdrückt werden ist mir klar. Ich würde gerne nur wissen, warum die erste auftritt, also was will mir der Compiler mit der Warnung sagen.

setSearchstrategy ist natürlich kein Setter einer anderen Klassen, sondern befindet sich in der gleichen Klassen:
Java:
 public void setSearchStrategy(SearchStrategy strat)
  {
    this.searchStrategy = strat;
    this.searchStrategy.setTreeNodes(this.treenodes);
    this.searchStrategy.setDataManager(this.dataManager); 
  }

Ich hoffe diesmal ist es klarer, worauf ich hinauswill.

Gruß
 
N

nillehammer

Gast
Die Methode setSearchStrategy ist nicht final, die Klasse Anonymisation auch nicht. Damit wäre es theoretisch denkbar eine Unterklasse bspw. MyAnonymistatuion zu erstellen und hier die Methode zu überschreiben. Das Ergebnis wäre, dass wenn der Konstruktor von MyAnonymisation super aufruft (also Anonymisation(int sz, String f)), in diesem dann die überschriebene Version von setSearchStrategy aufgerufen wird. Das kann tatsächlich so gewünscht sein, aber falls nicht kann dies zu merkwürdigem Verhalten oder sogar Programmabstürzen führen. Nämlich dann, wenn Du in der überschriebenen Version auf Instanzvariablen von MyAnonymisation zugreifst. Bei einem Aufruf dieser Methode vom Konstruktor von Anonymisation aus, ist die Instanz von MyAnonymisation aber noch garnicht fertig instanziert. Davor warnt Dich der Compiler. Hoffe, das war verständlich ;)
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Java Themen

Neue Themen


Oben