带有用户输入的 Getters Setters
Getters Setters with user input
将 getter 和 setter 与 userinput 一起使用是一种好的做法吗?我找了一些例子,但找不到任何例子。虽然下面的代码有效,但这是一个好习惯吗?我注意到如果我使用下面的代码,我将无法使用构造函数。谢谢你的解释。
public class Tests{
private String name;
private int id;
Scanner userinput = new Scanner(System.in);
public void setName(){
System.out.println("Enter a name: ");
name= userinput.next();
}
public String getName(){
return name;
}
public void displayInfo(){
setName();
System.out.println("You entered " + this.getName());
}
public static void main(String [] args){
Tests test = new Tests();
test.displayInfo();
}
}
我会说这是糟糕的做法。它违反了 "bean" 约定,并且不遵循 single responsibility principle(它会变异并提示输入一个值)。这个,
public void setName(){
System.out.println("Enter a name: ");
name= userinput.next();
}
应该只是
public void setName(String name){
this.name = name;
}
然后(不要无缘无故地让 Scanner
成为一个字段)像
public void displayInfo() {
Scanner userinput = new Scanner(System.in);
System.out.println("Enter a name: ");
setName(userinput.nextLine());
System.out.println("You entered " + this.getName());
}
我建议您更改带有 1 个参数的 setName() 方法。它将是干净的,并有助于远离许多错误。并且您必须对 getName() 方法进行一些更改。并在 class decleration.
中删除扫描仪
//setName
public void setName(String n) {
this.name = n;
}
//getName
public String getName() {
return this.name;
}
//main method.
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
Test test = new Test();
test.setName(s.next());
test.displayInfo();
}
我认为你的做法不是很好。你可以关注这个。在 main 函数中输入,然后使用
将输入值设置为名称
public void setName( String name){
this.name =name;
}
或者您可以使用另一种方法,如 takeInput(){}
,并从 main 方法中调用它,然后在 setter 方法中进行设置。像这样
public static void main(String[] args){
Tests tests= new Tests();
String inputString =tests.takeInput();
tests.setName(inputString);
tests.displayInfo();
}
并且 takeInput() 会喜欢这样
public String takeInput(){
System.out.println("Enter your name");
String str =userinput.next();
return str;
}
displayInfo()
简单显示数据
并且您在创建 Test class 对象时已经在使用构造函数。这称为默认构造函数。您还可以定义参数化构造函数,例如
Tests(String name){
this.name = name;
}
但在这种情况下,您不需要声明参数化构造函数。
为了更好的设计,您可以创建另一个 class,例如 Info.java,您可以在其中定义 class 成员,例如名称及其 getter 和 setter并且只能对主要方法使用测试 class。
public void setName(String name){ this.name=name; }
and in the main when you call:
test.setName(userinput.nextLine());
将 getter 和 setter 与 userinput 一起使用是一种好的做法吗?我找了一些例子,但找不到任何例子。虽然下面的代码有效,但这是一个好习惯吗?我注意到如果我使用下面的代码,我将无法使用构造函数。谢谢你的解释。
public class Tests{
private String name;
private int id;
Scanner userinput = new Scanner(System.in);
public void setName(){
System.out.println("Enter a name: ");
name= userinput.next();
}
public String getName(){
return name;
}
public void displayInfo(){
setName();
System.out.println("You entered " + this.getName());
}
public static void main(String [] args){
Tests test = new Tests();
test.displayInfo();
}
}
我会说这是糟糕的做法。它违反了 "bean" 约定,并且不遵循 single responsibility principle(它会变异并提示输入一个值)。这个,
public void setName(){
System.out.println("Enter a name: ");
name= userinput.next();
}
应该只是
public void setName(String name){
this.name = name;
}
然后(不要无缘无故地让 Scanner
成为一个字段)像
public void displayInfo() {
Scanner userinput = new Scanner(System.in);
System.out.println("Enter a name: ");
setName(userinput.nextLine());
System.out.println("You entered " + this.getName());
}
我建议您更改带有 1 个参数的 setName() 方法。它将是干净的,并有助于远离许多错误。并且您必须对 getName() 方法进行一些更改。并在 class decleration.
中删除扫描仪 //setName
public void setName(String n) {
this.name = n;
}
//getName
public String getName() {
return this.name;
}
//main method.
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
Test test = new Test();
test.setName(s.next());
test.displayInfo();
}
我认为你的做法不是很好。你可以关注这个。在 main 函数中输入,然后使用
将输入值设置为名称public void setName( String name){
this.name =name;
}
或者您可以使用另一种方法,如 takeInput(){}
,并从 main 方法中调用它,然后在 setter 方法中进行设置。像这样
public static void main(String[] args){
Tests tests= new Tests();
String inputString =tests.takeInput();
tests.setName(inputString);
tests.displayInfo();
}
并且 takeInput() 会喜欢这样
public String takeInput(){
System.out.println("Enter your name");
String str =userinput.next();
return str;
}
displayInfo()
简单显示数据
并且您在创建 Test class 对象时已经在使用构造函数。这称为默认构造函数。您还可以定义参数化构造函数,例如
Tests(String name){
this.name = name;
}
但在这种情况下,您不需要声明参数化构造函数。
为了更好的设计,您可以创建另一个 class,例如 Info.java,您可以在其中定义 class 成员,例如名称及其 getter 和 setter并且只能对主要方法使用测试 class。
public void setName(String name){ this.name=name; }
and in the main when you call:
test.setName(userinput.nextLine());