我有3个班级,Main,Pin和Employee。 (将来要添加的课程更多)
Main类运行一个程序,提示用户输入Pin类中方法的密码。密码使用SQL发送到数据库,以便从Employee和Pin类中的方法进行验证。如果密码匹配,则返回该员工的ID。
我遇到的问题是保存ID。我检索了ID,但我希望能够在程序的其余部分使用此ID。我想将它保存在Employee类中,但它是从Pin类的方法返回的。我如何能够保存这个ID以供Employee类或任何类使用?
答案 0 :(得分:1)
嗯,如果我理解你的话,你可能会想要像Employee和Pin这样的东西吗?
Employee e = ...
e.setPin(pin);
或者问题是,您不知道如何为Employee分配特定的引脚,以便在下次运行应用程序时仍将其分配给Employee?
更新:收到更多信息后:您需要为程序创建应用程序上下文。由于它似乎是一次只有一个用户的独立应用程序,因此在某些类中这可能是一个静态字段。
如果应用程序是多用户应用程序,则每个用户的上下文需要是静态的。
如果应用程序是Web应用程序,那么您的应用程序范围是Session
,它将在注销期间终止。 (这实际上并不精确,因为会话是会话范围,应用程序范围实际上是应用程序的上下文。但在您的情况下,引脚是会话范围的。)
独立/单用户应用程序的示例:
public class ApplicationContext {
static ApplicationContext CTX;
public static ApplicationContext get() {
if( CTX == null ) {
CTX = new ApplicationContext();
}
return CTX;
}
private Pin pin;
public Pin getPin() { return pin; }
public void setPin(Pin pin) { this.pin = pin; }
// ... add more stuff here ...
public void logout() {
CTX = null;
}
}
答案 1 :(得分:0)
您需要的是所谓的应用程序范围对象的概念。 有各种库可以与JavaEE一起使用,但我假设您正在使用Java SE。 DeltaSpike的apache允许在Java SE中执行这样的作用域bean。见an example。像这样,您可以创建一个@ApplicationScoped bean,您可以在其中存储应用程序中的值。
请注意,还有其他可能的范围,例如SessionScoped(HTTP),WindowsScoped(BrowserWindow)等。
此示例将指向正确的方向,但可能有更好的方法,而不是在您的情况下使用作用域。