资讯专栏INFORMATION COLUMN

Java 方法的参数可以有默认值吗?

freewolf / 1770人阅读

摘要:方法的参数可以有默认值吗例如回答不支持这种特性,如果你真的有需求,你可以通过方法的重载间接的支持默认的参数值使用工厂模式重载这个很简单这样就相当于给一个默认的参数值。但是有的时候如果参数太多,就不适合了。

Java 方法的参数可以有默认值吗?

例如

void method(String p1, int p2, bool p3=false);
回答

Java不支持这种特性,
如果你真的有需求,你可以

通过方法的重载间接的支持默认的参数值

使用工厂模式

重载

这个很简单

void method(String p1, int p2, bool p3){
  // ....
};
void method(String p1, int p2){
  bool p3 = false;
  // ... 
};

这样就相当于给p3一个默认的参数值。

但是有的时候如果参数太多,就不适合了。
就要用到下面的工厂方法

工厂方法
public class StudentBuilder
{
    private String _name;
    private int _age = 14;      // this has a default
    private String _motto = ""; // most students don"t have one

    public StudentBuilder() { }

    public Student buildStudent()
    {
        return new Student(_name, _age, _motto);
    }

    public StudentBuilder name(String _name)
    {
        this._name = _name;
        return this;
    }

    public StudentBuilder age(int _age)
    {
        this._age = _age;
        return this;
    }

    public StudentBuilder motto(String _motto)
    {
        this._motto = _motto;
        return this;
    }
}
Student s1 = new StudentBuilder().name("Eli").buildStudent();
Student s2 = new StudentBuilder()
                 .name("Spicoli")
                 .age(16)
                 .motto("Aloha, Mr Hand")
                 .buildStudent();

在上面的示例中,我们没有直接
的创建一个Student对象,而是
通过StudentBuilder来创建一个工厂,
然后在这个工厂中预先设定了一些模板,

为什么要创建一个StudentBuilder

而不是直接这样写:

Student s1 = new Student().age(16)

这样写有两个坏处

实例化有些字段没有初始化,可能存在

安全隐患

很多时候,我们创建一个Student之后,并不希望他有一个.age()方法,这个方法可能会被滥用。

收录于 https://github.com/fish56/Jav...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73819.html

相关文章

  • Java猫说】关于Java方法及传参一些问题

    摘要:我可不可以忽略返回值并未要求一定要处理返回值。你可以调用返回非类型的方法而不必理会返回值,这代表你要的是方法的行为而不是返回值,你可以不指派返回值。 阅读本文约1.2分钟 1、如果想要传入的参数是对象而不是primitive主数据类型会怎样? 在Java中所传递的所有东西都是值,但此值是变量所携带的值。还有,引用对象的变量所携带的是远程控制而不是对象本身,若你对方法传入参数,实际上传...

    woshicixide 评论0 收藏0
  • CSS基础篇--css reset重置样式那么重要吗?

    摘要:在以前写代码的时候,一般都会在里添加重置样式,其内容如下但是最近在网上看了看网络文章,也感觉有些重置是没有用的。当然重置的优点,缺点都不说了,估计心里都非常有数的,还是要根据实际项目来。后来主管给我推荐了一款替代重置的替代方案,那就是用。 在以前写html代码的时候,一般都会在head里添加重置样式reset.css,其内容如下: @charset utf-8; html, body,...

    rockswang 评论0 收藏0
  • 【译】Java 核心内容相关面试题

    摘要:能否声明一个内容为空的接口可以。能否将接口声明为不允许,这样做会导致编译错误。当异常没有被捕获时,会发生什么当前线程所在的线程组会执行一个叫的方法,最后程序会异常退出。非静态内部类可以使用哪些修饰符非静态内部类可以使用或修饰符。 原文地址 http://www.instanceofjava.com/2014/12/core-java-interview-questions.html 1...

    sunny5541 评论0 收藏0
  • 100 个基本 Python 面试问题第二部分(21-40)

    摘要:为我们提供了许多内置函数,例如并提供了创建用户定义函数的能力。会将该变量视为函数级作用域中的局部变量。回到目录中函数的用途是什么是中的内置函数之一。请注意,这种类型的参数语法不允许将命名参数传递给函数。函数接受一个称为的可选参数。 ...

    2450184176 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<