Interfacefür fehlermeldungen?

Status
Nicht offen für weitere Antworten.

nettchen

Aktives Mitglied
Hallo,

wollte zur Sammlung von Fehlermeldungen ein Interface erstellen, indem zu einem Fehlercode, die betreffende Fehlernachricht steht.
Doch da der Fehlercode int ist geht es nicht, wie schaffe ich es trotzdem, oder soll ich auf enums ausweichen. Oder gibts noch ne ganz andere Lösung?
Und wie kann ich den fehlermessage string generieren das man zwischendrin noch daten einsetzen kann. Also im unteren bsp das xxx durch einen speziellen Artikel?

Code:
public interface IErrorMessages
{
	public static final String 300 = "Artikel xxx nicht gefunden";

}
 
S

SlaterB

Gast
nenne die Variable doch
fehler300
oder
code300
oder schlicht
[beliebiger Buchstabe]300


ein enum ist generell zu empfehlen, da hast du aber die gleichen Benennungsprobleme,

ersetzen geht von simpel bis komplex:
eine statische Operation, die Teilstrings 'xxx' sucht und ersetzt,
oder komplexe Objekte (z.B. Enums!) als Fehlernachricht statt Strings, die intern ähnliches machen
 

mikachu

Top Contributor
Da würde sich ein enum lohnen.
Da du in deinem Code die Variable als final deklariert hast, kannst du da nix mehr an der Variable ändern.
Höchstens, wenn du die errorMessage ausgibst, dass du dann das XXX mittels String.replace() durch den Artikel ersetzt.

Doch ich würde enum's empfehlen. Enums sind cool :cool:
 

nettchen

Aktives Mitglied
hast du mal ein bisschenbspcode für das ersetzem, versteh das nämlich noch nicht so ganz, kannst ja gleich mein bsp mit den atikeln verwenden.
 

nettchen

Aktives Mitglied
naja möchte den string ja eigentlich nicht mehr ändern dürfen halt nur noch meistens ein bis zwei variablen einstzen, gibts da nicht irgend ne variante weil mit replace ist doch ganz schön aufwendig jedesmal erst das xx suchen weil wie gesagt es kann auch mehrere variablen zu ersetzen geben und klönnt ich das denn ändern wenn ich enums verwende ?
 
S

SlaterB

Gast
Code:
public static String getParametrisedMessage(String message, Object param) {
    return message.replaceAll("xxx",param.toString());
}
für mehrere Parameter und sonstige beliebige Features natürlich beliebig komplexer
 

nettchen

Aktives Mitglied
danke slater das einfach auszulagern ist natürlich ne klasse idee, bin ich gar nicht draufgekommen aber ich lern ja auch noch werd mal veruchen das für mehrere parameter auszubauen
 
S

SlaterB

Gast
bei Enums bzw. beliebigen eigenen Klassen könntest
du so eine Message gleich mal als Array speichern
"Artikel"
"nicht gefunden";

daraus ergibt sich die Anzahl der Parameter, ist leichter zusammenzufügen,
dann könntest du noch Parametertypen festlegen, Wertebereiche,
vielleicht Text-Alternativen einbauen (Parameter 1 -> Einzahl, sonst Mehrzahl)

naja, das letzte wär schon ziemlich kompliziert allgemein zu bauen ;),
aber alles ist möglich
 

nettchen

Aktives Mitglied
Hallo hab doch noch ne frage zu enums wie gebe ich denn da die Kombination an, ich gebe doch eigentlich immer nur alle möglichern varianten an? Oder muss ich die erst zusammenbasteln und dann wieder auseinander ? (code - text) das wäre doch nicht schön.
 

mikachu

Top Contributor
Code:
public enum ErrorMessages
{
   // die ganzen Messages einbauen
   e300( "Artikel xxx nicht gefunden" ),
   e400( "Artikel xxx nicht geliefert" );

   private String _txt;
   private ErrorMessages( String txt )
   {
      _txt = txt;
   }

   // die öffentlichen Methoden
   public String getMessage( String toReplaceWith )
   {
      return _txt.replaceAll( "xxx", toReplaceWith );
   }
}
aufrufen z.B. mit
Code:
   public static void main( String[] args )
   {
      ErrorMessages em1 = ErrorMessages.e300;
      System.out.println( em1.getMessage( "PCWare" ) );

      System.out.println( ErrorMessages.e400.getMessage( "eX991" ) );
   }

#just an option#
 

nettchen

Aktives Mitglied
hallo hab doch noch ein problem gefunden.

Und zwar habe ich mir gedacht da ich j nicht nur einen sondern mehrere Parameter habe lege ich mir einen innere klasse Replace an , welche den zu ersetzenden text und den ersetzten text specihert, mt getter methoden und nem Konstruktor in der enum Klase habe ich daraufhin die getMessage methode so angepasst das sie ein array von Replace als Paramter nimt und dann durchgeht und versucht zu ersetzen.

Allerdings bekomme ich beim aufruf Probleme wenn ich das so schreibe.
Wollte aber nicht jedesmal erst ein array anlegen und das füllen sondern dachte das kann man gleich so mahcen funktioniert bei string doch auch. Was könnte ich ändern das es funzt.

Und ist meine idee sehr fehleranfällig.
Was hättet ihr vorgeschlagen um das ganze also mit mehreren parametern zu lösen?

Code:
public enum Messages
{
	e300("Artikel AID nicht gefunden in Lager LID"), 
	e400("Artikel AID nicht geliefert am DATE"),
	e500("Artikel AID am DATE geliefert. Bestand von Artikel AID jetzt ANZ")

	private String text;

	private Messages(String txt)
	{
		text = txt;
	}

	// die öffentlichen Methoden
	public String getMessage(Replace[] toReplaceWith)
	{
		String result = text;
		for (Replace all : toReplaceWith)
		{
			result = text.replaceAll(all.getTextBeforReplace(), all.getTextAfterreplace());
		}		
		return result;
	}
	
	
	//innere Klasse die Ersetzung bildet, d.h. Kombination aus davor und danach
	public class Replace
	{
		private String textBeforReplace = null;
		private String textAfterreplace = null;
		
		public Replace(String textBeforReplace, String textAfterreplace)
		{
			this.textBeforReplace = textBeforReplace;
			this.textAfterreplace = textAfterreplace;
		}
		
		public String getTextBeforReplace()
		{
			return textBeforReplace;
		}
		public String getTextAfterreplace()
		{
			return textAfterreplace;
		}		
	}

}

und jetzt der Aufruf
Code:
....
System.out.println(Messages.e300.getMessage(new Replace[]{("AID", "314568"), ("LID", "C1")})) ;
....
 

mikachu

Top Contributor
Code:
// die öffentlichen Methoden
public String getMessage(Replace[] toReplaceWith)
{
	String result = text;
	for (Replace all : toReplaceWith)
	{
		result = result.replaceAll(all.getTextBeforReplace(), all.getTextAfterreplace()); // text mit result ersetzt !!!
	}
	return result;
}

wenn du die replaceAll()-Methode an 'text' aufrufst, wird immer nur der aktuell ersetzte inhalt wieder in 'result' geschrieben. das hat zur folge, dass alle vorher erledigten änderungen verloren gehen, da du immer auf die 'roh-version' des textes zugreifst, und dort die ersetzungen vollziehst.

ansonsten sieht das ganz gut aus :D
 

nettchen

Aktives Mitglied
ahja ok das muss ich noch ändern kannst du mir noch sagen was an meinem aufruf der methode falsch ist bekomme immer die fehlermeldungen

The left Hand side of a assignment must be a variable und
Syntax Error od token "," , invalid assignment Operator

Weil bei jeder ersetzung erst ein array erstellen un dann die einzelnen replces zuordnen ist ganz schöner mehraufwand denke ich.
Was gibt es denn noch für möglichkeien das in ein bis zwei zeilen aufzurufen?
 

mikachu

Top Contributor
ähm, das kann ich jez nicht nachvollziehen, wo der fehler auftreten soll.

poste mal bitte den code und die vollständige fehlermeldung...
 

nettchen

Aktives Mitglied
also der code ist

Code:
System.out.println(Messages.e300.getMessage(new Replace[]{("AID", "314568"), ("LID", "C1")})) ;

Das ist eine zeile zum testen ob es funktioniert

Und die fehlermeldungen kommen schon beim compelieren
und zwar

1. Syntax error on token ",", invalid AssignmentOperator
2. The left-hand side of an assignment must be a variable
 

mikachu

Top Contributor
versuchs mal mit
Code:
System.out.println(Messages.e300.getMessage(new Replace[]{new Replace("AID", "314568"), new Replace("LID", "C1")}));
 

nettchen

Aktives Mitglied
Hallo jetzt kommt der fehler

No enclosing instance of type Messages is accessible. Must qualify the allocation with an enclosing instance of type Messages (e.g. x.new A() where x is an instance of Messages).
 

nettchen

Aktives Mitglied
hallo und wieder mal ein Problemchen wie greif ich den auf einträge des enums zu, wenn ich den parameter also den fehlercode(z.B. e300) in einer Stringvariable gespeichert habe?

Habe es so versucht geht aber nicht
Code:
String nachricht = Messages.code.getMessage(
new Replace[]{("AID", "314568"), ("LID", "C1")})) ;

Jemand ne idee wie ich darauf zugreifen kan, weil den fehlercode lese ich während der aufzeit immer dynamisch aus, kann es also nicht fest hinschreiben.
 

nettchen

Aktives Mitglied
Hat denn keiner ine idee, wie ich auf das gewünschte enum zugreifen kann. Bzw wie muss ich das dann machen, wenn ich auf meine fehlermeldung zugreifen will also meinetwegen auch ohne enums.
 
G

Gast

Gast
wie schon erwähnt wurde:
mit einer Map kann man von beliebigen Werten (String "300", Integer 300) auf beliebige andere Objekte mappen, z.B. auf die Enums,
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H So viele Fehlermeldungen, dass ich nicht weiß wo das Problem ist. Java Basics - Anfänger-Themen 6
C Fehlermeldungen lesen Java Basics - Anfänger-Themen 2
R Compiler-Fehler HalloWelt-Programm korrekt abgeschrieben, trotzdem Fehlermeldungen Java Basics - Anfänger-Themen 2
V Komplizierte Compiler Fehlermeldungen Java Basics - Anfänger-Themen 7
D Array/Bubblesort Fehlermeldungen Java Basics - Anfänger-Themen 1
N Datentypen Frage bezüglich unbekannter Fehlermeldungen. Java Basics - Anfänger-Themen 1
T Hilfe zu Fehlermeldungen Java Basics - Anfänger-Themen 7
D fehlermeldungen Java Basics - Anfänger-Themen 8
G ungewöhnliche Fehlermeldungen in Eclipse Java Basics - Anfänger-Themen 29
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
J Ausgabe von Fehlermeldungen Java Basics - Anfänger-Themen 3
G wie liest man Fehlermeldungen Java Basics - Anfänger-Themen 3
M Controller + View: Fehlermeldungen Java Basics - Anfänger-Themen 2
C Fehlermeldungen umleiten auf JDialog Java Basics - Anfänger-Themen 2
G Fehlermeldungen bei Methoden Java Basics - Anfänger-Themen 9
D JButton Fehlermeldungen Java Basics - Anfänger-Themen 14
T Eclipse mit unsinnigen Fehlermeldungen? Java Basics - Anfänger-Themen 5
G Fehlermeldungen beim Ausführen Java Basics - Anfänger-Themen 9
G Vererbung und Fehlermeldungen Java Basics - Anfänger-Themen 2
S Bekomme Fehlermeldungen nicht weg ! :-| Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben