带有用户输入的Getters Setters

时间:2018-11-24 07:37:05

标签: java getter

将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();

    }

}

4 个答案:

答案 0 :(得分:3)

我会说这是可怕的做法。它违反了“ bean”合同,并且没有遵循single responsibility principle(它变异并提示输入值)。这个

1

应该是

public void setName(){
    System.out.println("Enter a name: ");
    name= userinput.next();     
}

然后(无缘无故地将public void setName(String name){ this.name = name; } 设置为字段)

Scanner

答案 1 :(得分:2)

我认为您的做法不好。您可以关注这一点。在主函数中进行输入,然后使用

将输入值设置为name
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类对象时已经在使用构造函数。这称为默认构造函数。您还可以定义参数化的构造函数,例如

Tests(String name){
      this.name = name;
}

但是在这种情况下,您不需要声明参数化的构造函数。

为了获得更好的设计,您可以创建另一个类,例如Info.java,您可以在其中定义类成员,例如name以及其getter和setter,并且只能将Tests类用于主要方法。

答案 2 :(得分:1)

我建议您使用1个参数更改setName()方法。这将是干净的,并且将有助于避免许多错误。而且,您必须对getName()方法进行一些更改。并在班级检查中移除扫描仪。

  public const string NAME_REGEX = @"^[\da-zA-Z-+_*&=^%$#@(){}~!]{8,12}$";

答案 3 :(得分:0)

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

a = finalres # Store your dictionary here

x, y = zip(*a.keys()) 
z = list(a.values())

# Plotting
fig = plt.figure()
ax = fig.gca(projection = '3d')

dx = .25 * np.ones(len(x))
dy = .25 * np.ones(len(y))
dz = z

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.bar3d(x, y, z, dx, dy, dz, color = 'blue')

plt.show()