Java小记-传参

一、 普通参数


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能不能设置参数初始值呢?
  • 好像不能。。。

但也有思路


  1. 重载
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;
	}
}

  1. 套娃
  • 对于方法
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的参数初始化。然后再配合上边的方法使用。

这么套娃是有一个考虑:有时候可能并不想在类里边添加这些个方法,容易造成滥用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的壳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值