java可选参数(Java方法参数太多怎么办)

本文目录
- Java方法参数太多怎么办
- Usage: java [-options] class [args]请问这是什么意思啊谢谢
- 在java中或者是actionscript中如何定义一个参数可选的函数
- 怎么设置参数可填可不填 java
- java 方法传参时,不是必须传的参数如何设置
- springboot获取请求参数的几种方式可选参数使用
- java中的可变参数
Java方法参数太多怎么办
引入参数对象
Person.class
public class Person {
public FullName fullName;
public Address address;
public boolean isFemale;
public boolean isEmployed;
public boolean isHomeOwner;
public Person(FullName fullName, Address address, boolean isFemale, boolean isEmployed, boolean isHomeOwner) {
this.fullName = fullName;
this.address = address;
this.isFemale = isFemale;
this.isEmployed = isEmployed;
this.isHomeOwner = isHomeOwner;
}
}
FullName.class
public class FullName {
public String lastName;
public String firstName;
public String middleName;
public String salutation;
public String suffix;
public FullName(String lastName, String firstName, String middleName, String salutation, String suffix) {
this.lastName = lastName;
this.firstName = firstName;
this.middleName = middleName;
this.salutation = salutation;
this.suffix = suffix;
}
}
Address.class
public class Address {
public String streetAddress;
public String city;
public String state;
public Address(String streetAddress, String city, String state) {
this.streetAddress = streetAddress;
this.city = city;
this.state = state;
}
}
问题:参数对象可能被滥用。如果一个开发者纯粹为了减少参数数量,把联系不紧的几个参数强捆在一个类中这肯定是行不通的,在可读性上甚至适得其反。
参数关系紧密合并到一个对象中
Builder模式:
Address.class
优点:客户端代码的可用性和可读性得到了大大提高,构造函数的参数数量明显减少调用起来非常直观。单个builder构建多个对象时Builder参数可在创建期间进行调整,还可以根据对象不同而进行改变,有效的避免重载构造函数。
缺点:增加代码量,代码变得更加冗长(相比较参数数量的增加,相同类型的参数混在一起,可选参数的增加而言,改善代码可读性更有价值)
Person.class
需求:当一个对象需要不同的参数构造方法?不能写5*5满足所有的需求吧
适用范围:构建对象时,如果碰到类有很多参数——其中很多参数类型相同而且很多参数可以为空时,使用Builder模式来完成。当参数数量不多、类型不同而且都是必须出现时,通过增加代码实现Builder往往无法体现它的优势。在这种情况下,理想的方法是调用传统的构造函数。再者,如果不需要保持不变,那么就使用无参构造函数调用相应的set方法吧。
代码
public class Person {
public FullName fullName;
public Address address;
public boolean isFemale;
public boolean isEmployed;
public boolean isHomeOwner;
public Person(FullName fullName, Address address, boolean isFemale, boolean isEmployed, boolean isHomeOwner) {
this.fullName = fullName;
this.address = address;
this.isFemale = isFemale;
this.isEmployed = isEmployed;
this.isHomeOwner = isHomeOwner;
}
public static class Builder {
private FullName fullName;
private Address address;
private boolean isFemale;
private boolean isEmployed;
private boolean isHomeOwner;
/**
* 如果有必填参数这里可以构造必填构造方法
*/
public Builder() {
}
public Builder setFullName(FullName fullName) {
this.fullName = fullName;
return this;
}
public Builder setAddress(Address address) {
this.address = address;
return this;
}
public Builder setFemale(boolean female) {
isFemale = female;
return this;
}
public Builder setEmployed(boolean employed) {
isEmployed = employed;
return this;
}
public Builder setHomeOwner(boolean homeOwner) {
isHomeOwner = homeOwner;
return this;
}
public Person create() {
return new Person(fullName, address, isFemale, isEmployed, isHomeOwner);
}
}
}
FullName.class
public class FullName {
public String lastName;
public String firstName;
public String middleName;
public String salutation;
public String suffix;
public FullName(String lastName, String firstName, String middleName, String salutation, String suffix) {
this.lastName = lastName;
this.firstName = firstName;
this.middleName = middleName;
this.salutation = salutation;
this.suffix = suffix;
}
public static class Builder {
private String lastName;
private String firstName;
private String middleName;
private String salutation;
private String suffix;
public Builder() {
}
public Builder setLastName(String lastName) {
this.lastName = lastName;
return this;
}
public Builder setFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public Builder setMiddleName(String middleName) {
this.middleName = middleName;
return this;
}
public Builder setSalutation(String salutation) {
this.salutation = salutation;
return this;
}
public Builder setSuffix(String suffix) {
this.suffix = suffix;
return this;
}
public FullName create() {
return new FullName(lastName, firstName, middleName, salutation, suffix);
}
}
}
public class Address {
public String streetAddress;
public String city;
public String state;
public Address(String streetAddress, String city, String state) {
this.streetAddress = streetAddress;
this.city = city;
this.state = state;
}
public static class Builder {
private String streetAddress;
private String city;
private String state;
public Builder() {
}
public Builder setStreetAddress(String streetAddress) {
this.streetAddress = streetAddress;
return this;
}
public Builder setCity(String city) {
this.city = city;
return this;
}
public Builder setState(String state) {
this.state = state;
return this;
}
public Address create() {
return new Address(streetAddress, city, state);
}
}
}
调用的地方
public static void main(String args) {
FullName fullName = new FullName.Builder().setFirstName("yes")
.setLastName("no").create();
Address address = new Address.Builder().setCity("china").setState("12")
.create();
Person person = new Person.Builder().setAddress(address)
.setFullName(fullName).create();
}
重载
适用范围:方法中参数可选参数或者参数中指定参数相同
代码
public String name(String name,int year) {
return name+year;
}
/**
* 重载
* @param name
* @return
*/
public String name(String name) {
return name+"null";
}
优点:遇到可选参数或者默认参数时,使用方法重载会十分有效。
Usage: java [-options] class [args]请问这是什么意思啊谢谢
这是在说明java虚拟机如何使用,java args)中的args。
举个例子来讲:java -version你就会得到java虚拟机的版本,java Test就会运行当前目录下的Test.class文件,java Test1 a b酒会运行Test1.class文件并且把a,b传给String args。
注意java是大小写敏感的,所以要注意大小写
在java中或者是actionscript中如何定义一个参数可选的函数
在Java中可以这样定义:
public void test(String ... args){
for(String arg : args){System.out.println(arg);}
}
ActionScript 中参数可变的函数可以进行如下格式的定义:
private function sum(... nums):Number {
var total:Number = 0;
for(var i:int = 0; i 《 nums.length;i++){
total += nums;
}
return total;
}
希望我的回答对你有所帮助。
怎么设置参数可填可不填 java
java里有种可变参数。你看下这种用法。很简单。
可变参数就是当你调用这个方法的时候,可以传给它任意个参数
一般可变参数定义方法都是
prt(int...){
// 这个方法是可变参数的
}
java 方法传参时,不是必须传的参数如何设置
1、java是强匹配的,调用方法,对应的参数必须要有值,如果不是必须传的,意思是你可能不需要用的,可以传null
2、或者改造原有的方法参数,把多余的参数去掉
3、或者另外写一个方法,少参数的,然后该方法内部,调用原来的方法
4、代码截图如下:
5、看代码,13行的,就相当于调用少一个参数的
拓展资料:
如题,有一个方法里两个形参,我另一个文件类中一个方法想要那个方法的返回值,可是第二个参数在这里用不到,能否只传第一个参数 如何实现,前提这个类不能继承后重写方法,因为多人合同写的。
解决方案
不可以,变通的办法是再写一个只有一个参数的函数重载形式,在其中给另一个参数一个预设值,间接调用。
解决方案二:
一个Action调用两个不同的方法
解决方案三:
调用的时候给一个无影响的值
解决方案四:
讲道理的话是不能这样做的,不过如果你传的第二个参数如果对于当前调用时没有意义也是可以传一个值的。
解决方案五:
首先,Java语法规定了方法的参数列表,那么调用的时候就需要按照方法定义传递给足够的参数,你那种需要少传参的话可以重载方法,不要定义那么多参数就可以了。
解决方案六:
你一个方法传入两个参数,但如果你只调用一个,那么另外一个参数你让人家多尴尬,你让人家尴尬了,人家也不会让你好过的,因此就给你报错啊,当然你可以像楼上所说,传入一个无影响的参数进去,但这又有什么意义,还造成代码的浪费,你这个方法每调用一次,就造成一次浪费,因此,最好的方法就是传入一个参数,写一个重载方法。初学者经验不足,互相指教~
解决方案七:
既然用不到第二个参数,最简单的,给个无关痛痒的初始值。
解决方案八:
方法定义2个参数,在方法体内提供判断参数,看传入的参数是否为null,调用方法时,只传入一个值,另一个是null就行。
解决方案九:
方法 重载一下 就好了。
springboot获取请求参数的几种方式可选参数使用
post 请求获取body内容
注意:HttpServletRequest 请求中的 body 内容仅能调用 request.getInputStream(), request.getReader()和request.getParameter("key") 方法读取一次,重复读取会报 java.io.IOException: Stream closed 异常。
1.get请求获取全部参数
2、可选参数
@RequestMapping的可选参数
使用@requesMapping标注的处理函数包括的可选参数,除了HttpServletRequest, HttpServletResponse, HttpSession这些web应用中常见的参数及之前提到过的@PathVariable外,还可以包括以下可选的参数,其中大部分参数的顺序没有特殊要求的。
当前请求所属的区域设置。
用来读取request content,相当于 request.getInputStream()或request.getReader();
用来生成reponse content,相当于response.getOutputStream()或response.getWriter()。
当前认证了的用户
Spring 对request,response,session等web元素封装后的对象HttpServletRequest/response/HttpSession等原始的web对象
用来存放domain model的map结构。
***隐藏网址***
通过spring 的databinding机制将request请求中的参数自动转换为对应的java bean实例。
对command或form objects值的校验结果。此参数必须紧跟在需校验的command或form object参数后面。因为databinding可以允许将输入参数和多个java bean 进行绑定(也就是说我们可以把输入request param转换成为多个java 对象)。
Session的状态。当使用@SessionAttributes来标注请求需要session中对应的值时,在处理结束时,使用SessionStatus. setComplete()来将session设置为时效。
将request参数和handler method参数做绑定。例如
将handler method中的参数与request header中的值绑定,例如
将handler method中的参数与request context body中的值绑定
例如
表示将request body中的内容与u这个入参绑定。
将handler method中的参数与cookie中的值绑定
例如
将handler method中的参数与对应的类型绑定,名称缺省为类名(首字母小写),如果ModelAttribute指定了值则以该值作为model attribute name。
例如
实例
1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。
***隐藏网址***
2、通过HttpServletRequest接收,post方式和get方式都可以。
3、通过一个bean来接收,post方式和get方式都可以。
(1)建立一个和表单中参数对应的bean
(2)用这个bean来封装接收的参数
4、通过@PathVariable获取路径中的参数
***隐藏网址***
5、使用@ModelAttribute注解获取POST请求的FORM表单数据
Jsp表单如下:
Java Controller如下:
6、用注解@RequestParam绑定请求参数到方法入参
当请求参数username不存在时会有异常发生,可以通过设置属性required=false解决,例如: @RequestParam(value="username", required=false)
java中的可变参数
B项是不对的,不能有多个可变参数。。。。
可变参数只能有一个,而且只能是在形参的最后一个

更多文章:
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40
下载mysql的步骤(win10安装mysql的步骤和方法)
2026年9月7日 04:10
checked in(check in和check out的区别)
2026年9月7日 01:20
java经典上机编程题(java上机题 请问这道题应该怎么写)
2026年9月7日 01:10
影视剧中有哪些剧情颠覆了你的三观?金庸的武侠小说《白马啸西风》为什么没有被拍成电影或者电视剧
2026年9月7日 00:30




