我想首先指出我是Java的新手,所以请轻松一点。 :)
我有一个随机生成名称的方法。 我只是想知道是否更好的做法是直接调用带有返回类型的方法:
String personName = People.nameGen();
或者我最近学到的,创建'get'方法来获取'实例?'像这样的变量:
public String getName(){
return this.name;
}
然后:
String personName = Person1.getName();
我已经尝试了两种方式,它们看起来完全相同,我似乎无法理解为什么你会用另一种方式。
甚至直接调用实例变量..?
name = People.name; or something like that?
所有这些选项都会生成我在该方法中生成的人名的输出。
编辑,这就是我所拥有的:import java.util.Random;
public class People {
int genderCode;
int age;
String gender;
String name;
public People(){
genderCode = genderCode(); //I use genderCode for the nameGen method
}
public int genderCode(){
Random randNum = new Random();
genderCode = randNum.nextInt(2);
return genderCode;
}
public int age(){
Random randNum = new Random();
age = 1+randNum.nextInt(80);
return age;
}
public String gender(){
if (genderCode == 0 && age <=18) {
gender = "girl";
} else if (genderCode == 0 && age >18){
gender = "woman";
} else if (genderCode == 1 && age <=18){
gender = "boy";
} else if (genderCode == 1 && age >18){
gender = "man";
}
return gender;
}
public String nameGen() {
String[] firstNameGirl = { "Lucy", "Marry", "Bonnie", "Clair" }; //More names will be added later
String[] firstNameBoy = { "Bob", "Jacob", "William", "Nathan" };
String[] lastName = { "Smith", "Brown", "Johnson" };
Random randNum = new Random();
if (genderCode == 0) {
String girlName = firstNameGirl[randNum.nextInt(firstNameGirl.length)]+ " "+ lastName[randNum.nextInt(lastName.length)];
name = girlName;
} else if (genderCode == 1){
String boyName = firstNameBoy[randNum.nextInt(firstNameBoy.length)]
+ " " + lastName[randNum.nextInt(lastName.length)];
name = boyName;
}
return name;
}
}
然后对于主要人物,我只是想随意创造一个新人......例如:
System.out.println("You meet a " +age+ " year old " +gender+ " named " + name);
感谢所有快速解答!它们都是独一无二的信息!
答案 0 :(得分:0)
我会将标准访问器方法(getter / setter)保留为访问字段的默认目的,并创建另一个名为
的类class PersonUtils{
public static String getRandomName(){
// code
}
}
答案 1 :(得分:0)
使用此:
private Person ()
{private String name;
private void setName(String name ) {
this.name=name;
}
private getName(){
this.name=name;
return name;
}
}
答案 2 :(得分:0)
问自己的问题是People
类(或Person1
类 - 你似乎使用了不同的名字)的工作或责任是什么,以及有多少外部资源,协调和时间它需要吗?这些问题还应引导您检查:您的班级是否需要保留姓名或其他任何内容?换句话说,生成这个名字贵吗?你只需要一次名字吗?您需要共享一个名称,还是需要针对不同用户或线程或其他名称使用不同的名称?
例如,如果您的方法通过简单地迭代和几次调用Math.random()
来创建一个随机名称,并且您每次都想要一个不同的名称,这听起来很适合静态实用程序类:
public final NameUtils {
private final NameUtils() {} // only allow access to static methods
// 2 consecutive calls will give different results
public static String generateName() {
StringBuilder name = new StringBuilder();
// do stuff to generate name
return name.toString();
}
}
或者,如果您的名称生成涉及查找和提取数据库,xml文件库和/或某些外部网站或服务(无论是SOAP还是REST或其他),甚至只是解析带有列表的平面文件它中的常用名称,那么你需要更多的参与,但是调用代码隐藏了哪些参与。
public interface NameGenerator {
// 2 consecutive calls should give same result for a given instance
String getName();
// Might take a while (30 seconds or more) consider wrapping in a thread and using a `Future`
void generateName() throws NameGenerationException;
}
public class NameGeneratorImpl implements NameGenerator {
private String name = null;
public String getName() { return this.name; }
public void generateName() {
Resource resource = // for example database connection
try {
// this might even be broken down into multiple private methods
// a. access resource
StringBuilder nameBuilder = new StringBuilder();
// b. get data from resource
// c. use data in name formula
this.name = nameBuilder.toString();
} catch(ResourceException e) {
throw new NameGenerationException(e);
} finally {
// free expensive resource
}
}
}
答案 3 :(得分:0)
您的实例变量通常是私有的,这就是为什么要创建一个getter / setter来访问它们的原因。您的getName()方法是任何类都可以调用的公共方法。你使用哪一个取决于你希望你的班级如何运作。如果类的目的是生成随机名称,您将使用Jigar的示例。
如果你的getName()函数应该检索一个人的名字(一个实例变量),那么你将使用一个getter。