gpt4 book ai didi

java - 如何有条件地将 Java 中的参数传递给采用可变数量参数的方法?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:02:39 25 4
gpt4 key购买 nike

我正在使用 JDO 查询类,我需要有条件地将某些参数传递给 execute 方法,如下面的代码所示。

我不知道如何在 Java 中执行此操作。

query.declareParameters("String alphaP");
query.declareParameters("String bravoP");
query.declareParameters("String charlieP");

if (condition) {
if (othercondition) {
query.declareParameters("List<String> stringList");
}
else {
query.declareParameters("String simpleString");
}
}

if (someothercondition) {
query.declareParameters("int deltaP");
}

if (yetanothercondition) {
query.declareParameters("int echoP");
}

if (thelastcondition) {
query.declareParameters("int foxtrotP");
}

List<ResultClass> results = (List<ResultClass>) query.execute(
alphaP,
bravoP,
charlieP,

// ... and whatever other parameters are required based on
// which conditions are true above

);

最佳答案

How to conditionally pass parameters in Java to a method that takes a variable number of arguments?

@Richard 已经回答了关于 JDO Query 类的具体问题。 (使用可选的 queryWith... 方法之一。)

更普遍的问题的答案是“视情况而定”。具体来说,这取决于方法签名。

1) 如果方法被声明为采用 传递的参数数量可变 作为数组、列表、 map 或其他任何东西, 那么答案就很明显了。集合 数组中的实际参数/ 列出/ map /任何东西,并传递它们。

2) 如果方法声明为 “varargs”参数,那么你可以 传递一个实际的显式数组 参数;例如

  public void test(String... args) { ... }

test("Hi", "Mom");
test(new String[]{"Hi", "Pa"});
String[] args = new String[]{"Hi", "Bro"};
test(args);

3) 如果实际上有多个 重载的方法,那么你没有 选择但以编程方式选择 并调用适当的重载 根据你的参数数量 必须通过:

  public void test(String arg1) { ... }
public void test(String arg1, String arg2) { ... }
...

if (nosArgs == 1) {
test(arg1);
} else if (nosArgs == 2) {
test(arg1, arg2);
} else ...

您可能认为反射会有所帮助,因为当您以反射方式调用方法时,您会将实际参数作为 Object[] 传递。但这并没有多大帮助,因为您还需要使用适当的 Method 对象,并且(比如说)test 方法的每个重载都有不同的 方法对象。所以你最终得到了等同于非反射情况的条件/开关代码。

关于java - 如何有条件地将 Java 中的参数传递给采用可变数量参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3739868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com