![](/img/trans.png)
[英]In Android Does multipart entity is used for download file too as I can't see any example or details description for that class
[英]How can I use the Strings values stored in a main class in my secondary class? (see description for details. Java)
我得到了一个MainClassTestPrompts类, 该类使用输入框询问用户的用户名和密码,然后将每个值存储在单独的字符串中。
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MainClassTestPrompts {
public static void main(String[] args) {
JTextField username = new JTextField();
JTextField password = new JPasswordField();
Object[] DBInputBox = { "Username:", username, "Password:", password };
try {
// I. Username and Password Prompts
JOptionPane.showConfirmDialog(null, DBInputBox, "Login", JOptionPane.OK_CANCEL_OPTION);
String Username = username.getText();
String Password = password.getText();
System.out.println("Username: " + Username);
System.out.println("Password: " + Password);
} catch (Exception e) {
System.out.println(e);
}
}
}
然后,我有另一个类SecondaryClass ,它将执行一组操作,然后将需要存储的字符串: Username和Password以执行操作。
我的问题是我不知道如何只获取主类中存储的字符串值,然后在辅助类中使用它们而又不会再次得到提示。 我想运行我的主类,获取用户/密码,然后最终运行第二个类,该类将选择存储的值。
我在第二堂课上尝试过的
public class SecondaryClassUseCredentials extends MainClassTestPrompts {
public static void main(String[] args) {
MainClassTestPrompts.main(null); // this will just run the MainClassTestPrompt which is not what I want.
String Username = MainClassTestPrompts.Username; //I know this is wrong but is sort of what I'm looking for...
String Password = MainClassTestPrompts.Password;
}
我将假设您对Java还是很陌生,也许对编程而言,否则很难解释您的设计决策。
首先,您有一个正确的设计原则:一个类应该做一件事。 因此,您的MainClassTestPrompts
会提示您输入用户名和密码,而SecondaryClassUseCredentials
希望对它们进行处理。 这称为关注点分离。
错误是在两者中都使用main
,或者使用没有返回类型的方法。 由于将main
用作应用程序的切入点,因此最好不要在这两个类中都使用main
-它们是业务逻辑的一部分,应用程序接线应该是另一个问题。
因此,您可以做的是定义一个类/方法对,它要求提供凭据并返回它们,而另一对则调用前者并使用其结果。 一次只执行一个步骤,即使我通常建议这样做,我也将保留静态方法并且不引入任何接口:
class MainClassTestPrompts {
static Map.Entry<String, String> askForCredentials() {
JTextField username = new JTextField();
JTextField password = new JPasswordField();
Object[] DBInputBox = { "Username:", username, "Password:", password };
JOptionPane.showConfirmDialog(null, DBInputBox, "Login", JOptionPane.OK_CANCEL_OPTION);
return new SimpleEntry<>(username.getText(), password.getText());
}
}
现在您的呼叫者类可能如下所示:
class SecondaryClassUseCredentials {
static void doSomething() {
Map.Entry<String, String> credentials = MainClassTestPrompts.askForCredentials();
String username = credentials.getKey();
String password = credentials.getValue();
...
}
}
对于下一次迭代,请尝试摆脱静态变量并使用接口。 为了让您自己尝试一下,我只会建议SecondaryClassUseCredentials
如下所示:
class SecondaryClassUseCredentials {
private final Supplier<Map.Entry<String, String>> credentialsSupplier;
SecondaryClassUseCredentials(Supplier<Map.Entry<String, String>> credentialsSupplier) {
this.credentialsSupplier = credentialsSupplier;
}
static void doSomething() {
Map.Entry<String, String> credentials = credentialsSupplier.get();
String username = credentials.getKey();
String password = credentials.getValue();
...
}
}
在MainClassTestPrompt中,变量声明应该在try catch块之前,然后它将起作用。 在编写时,变量为String Username; String Password
String Username; String Password
本地的,可以尝试捕获,您不能从SecondaryClass访问它们。
public class MainClassTestPrompts { //Better private String Username; private String Password; public String getUsername(){ return this.Username; } public String getPassword(){ return this.Password; } public static void main(String[] args) { JTextField username = new JTextField(); JTextField password = new JPasswordField(); Object[] DBInputBox = { "Username:", username, "Password:", password}; //Not ideal but will work try { // I. Username and Password Prompts JOptionPane.showConfirmDialog(null, DBInputBox, "Login", JOptionPane.OK_CANCEL_OPTION); //Edited Username = username.getText(); Password = password.getText(); System.out.println("Username: " + Username); System.out.println("Password: " + Password); } catch (Exception e) { System.out.println(e); } } }
然后在中学
public class SecondaryClassUseCredentials extends MainClassTestPrompts { public static void main(String[] args) { MainClassTestPrompts.main(null); // this will just run the MainClassTestPrompt which is not what I want. String Username = MainClassTestPrompts.getUsername(); //I know this is wrong but is sort of what I'm looking for... String Password = MainClassTestPrompts.getPassword(); }
如果在扩展MainClass时只想使用继承,那么SecondClass的代码也将起作用。 但是,如果您想在其他任何地方使用密码和用户名,则最好编写适当的get()方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.