一、 普通参数
class classA{}
void doSomething(int a, double b, char c, String s){}
void doSome(int[] a, double[][] d){}
void dododo(Number a){} // Int Double Float 都算Number,都是儿子[\狗头]
void doo(classA a, int a){}
二、不定参数
- 只能有一个
- 类
...
对象
void add_and_show(String str, Number...n){
double result = 0;
for(Number m: n){
result += m.doubleValue();
}
System.out.println(str + result);
}
三、参数默认值
Python如是说
def hello(sex, name="Bender"):
(lambda :print(f'hello {name} 女士') if sex=='female' else print(f'hello {name} 先生'))()
- 那么
Java
能不能设置参数初始值呢? - 好像不能。。。
但也有思路
- 重载
class Test
{
double init_a = 12;
double init_b = 14;
double add(double a, double b)
{
return a+b;
}
double add(double n)
{
return init_a + n;
}
double add()
{
return init_a + init_b;
}
}
- 套娃
- 对于方法
class Test
{
final int aa = 12;
final double bb = 14;
private int init_a = aa;
private double init_b = bb;
double add()
{
double result = this.init_a + this.init_b;
// 需要参数初始化
this.init_a = aa;
this.init_b = bb;
return result;
}
public Test a(int a)
{
this.init_a = a;
return this;
}
public Test b(double b)
{
this.init_b = b;
return this;
}
}
使用【先设参数,再调用方法】
Test t = new Test();
double result = t
.a(1)
.add(); // result = 1 + 14 = 15.0
double result1 = t
.a(1)
.b(6)
.add(); //result1 = 1+6=7
double result2 = t.add();// result2 = 12+14=26
- 每次执行方法后得进行参数恢复【有些麻烦】
- 调用起来也不算很麻烦 吧 哈哈哈哈
- 对于类
class Person{
praivate String name;
private int age;
private int phoneNumber;
public Person(String name, int age, int pNb){
this.name = name;
this.age = age;
this.phoneNumber = pNb;
}
}
class PersonBuilder{
private String name_ = "None";
private int age_ = 20;
private int pnb_ = 12138;
public Person buildone(){
return new Person(name_, age_, pnb_);
}
public PersonBuilder name(String name){
this.name_ = name;
return this;
}
public PersonBuilder age(int age){
this.age_ = age;
return this;
}
public PersonBuilder phone(int phb){
this.pnb_ = phb;
return this;
}
}
示例
Person one = new PersonBulider()
.name("Jack")
.age(12)
.phone(114)
.buildone();
Person one_one = new PersonBuilder()
.name("金废")
.age(1)
.buildone();
- 对于参数比较少得类,还是重载来香
- 要是参数比较多的话,那就还是这样来的方便些
- ?: 为什么不直接在
Person
类里边构造name()
、age()
、phone()
这些方法,这样调用起来岂不是更简单。
Person p = new Person()
.name("Amy")
.age(16);
这样当然可以,但是也有一些问题
- 可能需要在
Person
类内对一些属性值初始化,否则如上代码p
对象的phoneNumber
属性就没有被初始化 - 这么做得有一个前提条件-----需要 无参的
类构造方法
也就是
class Person{
private String name;
private int name;
private int phoneNumber;
public Person(){} //无参的 类构造方法
}
- 当然也可以在
Person
类中就直接对private
的参数初始化。然后再配合上边的方法使用。
这么套娃是有一个考虑:有时候可能并不想在类里边添加这些个方法,容易造成滥用。 |