我有一个setter,我希望它检查一个电子邮件地址是否包含字符"@"和".".,在设置值之前.如果电子邮件地址不包含这些字符,我希望用户再次输入电子邮件地址.我应该读取setter中的新值还是不好的实践,只能在main或不同的方法中完成?
import java.util.Scanner;
public class Person {
private String emailAddress;
Scanner input = new Scanner( System.in);
public void setEmail(String email)
{
while(email.indexOf('@')<0 || email.indexOf('.')<0)
{
System.out.println("The email address must contain the characters \"@\" and \".\" ");
System.out.println("Enter email address again:
email = input.nextLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
不,这是不好的做法.
问题是,如果在没有交互式控制台的上下文中调用方法,例如在单元测试中,则会卡住.
抛出一个IllegalArgumentException,让调用者实现重试(或不重试).
在你的二传手:
void setEmail(String email) {
if (!email.contains("@") || !email.contains(".")) {
throw new IllegalArgumentException("Invalid email: " + email);
}
this.emailAddress = email;
}
Run Code Online (Sandbox Code Playgroud)
在您的来电者中:
while (true) {
try {
setEmail(emailAddress);
break;
} catch (IllegalArgumentException e) {
// Show a message, or whatever.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |