什么规范支持可选参数?
当前回答
在JDK>1.5中,你可以这样使用它;
public class NewClass1 {
public static void main(String[] args) {
try {
someMethod(18); // Age : 18
someMethod(18, "John Doe"); // Age & Name : 18 & John Doe
} catch (Exception e) {
e.printStackTrace();
}
}
static void someMethod(int age, String... names) {
if (names.length > 0) {
if (names[0] != null) {
System.out.println("Age & Name : " + age + " & " + names[0]);
}
} else {
System.out.println("Age : " + age);
}
}
}
其他回答
你可以这样使用:
public void addError(String path, String key, Object... params) {
}
params变量是可选的。它被视为对象的可空数组。
奇怪的是,我在文档中找不到任何关于这个的东西,但它是有效的!
这是Java 1.5及以上版本的“新功能”(Java 1.4或更早版本不支持)。
我看到用户bhoot在下面也提到了这一点。
简短版本:
用三个点:
public void foo(Object... x) {
String first = x.length > 0 ? (String)x[0] : "Hello";
int duration = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
}
foo("Hii", );
foo("Hii", 146);
(根据@VitaliiFedorenko的回答)
变量函数可以(以某种方式)做到这一点。除此之外,必须提供方法声明中的所有变量。如果希望变量是可选的,可以使用不需要参数的签名重载方法。
private boolean defaultOptionalFlagValue = true;
public void doSomething(boolean optionalFlag) {
...
}
public void doSomething() {
doSomething(defaultOptionalFlagValue);
}
Java中不能使用默认参数。在c#, c++和Python中,我们可以使用它们。
在Java中,我们必须使用两个方法(函数),而不是一个具有默认参数的方法。
例子:
Stash(int size);
Stash(int size, int initQuantity);
http://parvindersingh.webs.com/apps/forums/topics/show/8856498-java-how-to-set-default-parameters-values-like-c-
如果它是一个API端点,一种优雅的方法是使用“Spring”注释:
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false, defaultValue = "hello") String id) {
return innerFunc(id);
}
注意在这个例子中,innerFunc将需要这个变量,因为它不是api端点,不能使用这个Spring注释使它成为可选的。 参考:https://www.baeldung.com/spring-request-param
推荐文章
- javax.transaction.Transactional vs . org.springframework.transaction.annotation.Transactional
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?
- 将Date对象转换为日历对象
- 在Java中保存最后N个元素的大小有限的队列