Ich habe einen Formel-Parser, der relativ unabhängig arbeitet. Er soll jedoch auch Konstanten, die von "außen" geliefert werden, verarbeiten können. Genau diese Verbindung macht Probleme.
Ich benutze eine Klasse ConstToken, die eine Unterklasse von ValueToken ist (die anderen Unterklassen sind Zahlen und Variablen):
Die Verbindung mit der "Umgebung", die die Konstanten-Werte liefert, geschieht über das Interface ConstProvider:
Das alles wäre in einer "statischen" Umgebung kein Problem. Ich habe jedoch in Probleme, wenn ich alles initialisiere (weil dann eine Formel über ConstProvider auf eine andere Formel verweisen kann, die noch gar nicht konstruiert wurde), und wenn eine Formel kopiert wird (weil sich dann die Bedeutung dessen, was referenziert wird, teilweise ändert - etwa so, wie wenn man ein Programm verschiebt, das relative Pfadnamen benutzt).
Wie kann ConstToken zu seinen Werten gelangen, ohne sich über ConstProvider zu früh und zu stark an die Umgebung zu koppeln?
Ich habe das dumme Gefühl, dass ich irgend etwas Offensichtliches übersehe. Es doch muss irgendeine Möglichkeit zu einer Art Lazy Loading mit gleichzeitiger Inversion of Control geben...
Ich benutze eine Klasse ConstToken, die eine Unterklasse von ValueToken ist (die anderen Unterklassen sind Zahlen und Variablen):
Java:
public abstract class ValueToken<T> implements Token<T> {
public abstract T get();
}
public class ConstToken<T> extends ValueToken<T> implements Token<T> {
private final String name;
private final ConstProvider<T> provider;
public ConstToken(String name, ConstProvider<T> provider) {
this.name = name;
this.provider = provider;
}
@Override
public T get() {
return provider.get(name);
}
...
}
Die Verbindung mit der "Umgebung", die die Konstanten-Werte liefert, geschieht über das Interface ConstProvider:
Java:
public interface ConstProvider<T> {
public T get(String name);
public boolean exists(String name);
}
Das alles wäre in einer "statischen" Umgebung kein Problem. Ich habe jedoch in Probleme, wenn ich alles initialisiere (weil dann eine Formel über ConstProvider auf eine andere Formel verweisen kann, die noch gar nicht konstruiert wurde), und wenn eine Formel kopiert wird (weil sich dann die Bedeutung dessen, was referenziert wird, teilweise ändert - etwa so, wie wenn man ein Programm verschiebt, das relative Pfadnamen benutzt).
Wie kann ConstToken zu seinen Werten gelangen, ohne sich über ConstProvider zu früh und zu stark an die Umgebung zu koppeln?
Ich habe das dumme Gefühl, dass ich irgend etwas Offensichtliches übersehe. Es doch muss irgendeine Möglichkeit zu einer Art Lazy Loading mit gleichzeitiger Inversion of Control geben...
Zuletzt bearbeitet von einem Moderator: