Ich habe eine JSF -Anwendung mit einem Einstellungen , das früher @Applicationscoped war, wird jedoch in @SessionsCoped geändert, da die Anwendung erweitert wird, um Benutzer zu unterstützen, die unterschiedliche Einstellungen Werte benötigen. Ein Objekt einer Superklasse von Einstellungen wird nach einer Methode benötigt, die in einem Thread ausgeführt wird. Wenn die Einstellungen @applicationscoped war, funktionierte es gut, einfach ein (das) Einstellungen an die Thread-Run-Methode zu übergeben, da es sich um einen Singleton handelte. Das funktioniert jedoch nicht mehr, da der Thread außerhalb des Kontextes einer Sitzung ausgeführt wird.
Ich möchte eine Instanz einer Superklasse von Einstellungen erstellen, die ein Klon von Einstellungen ist, sofern die von dieser Superklasse definierten Methoden und Datenelemente definiert sind. Ich weiß jedoch nicht, dass Clone () (oder der native Code dahinter) auf diese Weise verwendet werden kann. (Ich brauche nur eine flache Kopie.) Was ich in (etwas) Pseudocode tun möchte, ist Folgendes: < /p>
Code: Select all
public class SettingsBase
{
int dataMember1;
...
}
@SessionScoped
public class Settings extends SettingsBase implements Serializable
{
int appDataMember1;
}
Settings settings = new Settings();
SettingsBase baseSettings = (SettingsBase)settings.clone( );
assert !(baseSettings instanceof Settings);
Wenn ich dies nicht tun kann, muss ich eine Methode zu Einstellungsbasis hinzufügen, die alle (30+) Datenmitglieder zu einer neuen Instanz der Klasse kopiert, die ich im Folgenden erhofft hatte:
Code: Select all
public static SettingsBase cloneFrom( SettingsBase settings )
{
SettingsBase newSettings = new SettingsBase();
newSettings.dataMember1 = settings.dataMember1;
newSettings.dataMember2 = settings.dataMember2;
...
return( newSettings );
}