我已将Netbeans设置为在我的Java代码中显示未经检查的警告,但我无法理解以下行中的错误:
private List<String> cocNumbers;
private List<String> vatNumbers;
private List<String> ibans;
private List<String> banks;
...
List<List<String>> combinations = Utils.createCombinations(cocNumbers, vatNumbers, ibans);
Run Code Online (Sandbox Code Playgroud)
得到:
[unchecked] unchecked generic array creation for varargs parameter of type List<String>[]
方法来源:
/**
* Returns a list of all possible combinations of the entered array of lists.
*
* Example: [["A", "B"], ["0", "1", "2"]]
* Returns: [["A", "0"], ["A", "1"], ["A", "2"], ["B", "0"], ["B", "1"], ["B", "2"]]
*
* @param <T> The type parameter
* @param elements …Run Code Online (Sandbox Code Playgroud) 如果我有一个vararg Java方法foo(Object ...arg)并且我打电话foo(null, null),我有两个arg[0]和arg[1]作为nulls.但如果我打电话foo(null),arg本身就是空的.为什么会这样?
我怎么称呼foo这样foo.length == 1 && foo[0] == null的true?
我想我可以在Python 2的函数调用中使用可变长度位置参数之后的命名参数,但是SyntaxError在导入python类时我得到了一个.我正在使用以下"get"方法编写,例如:
class Foo(object):
def __init__(self):
print "You have created a Foo."
def get(self, *args, raw=False, vars=None):
print len(args)
print raw
print vars
Run Code Online (Sandbox Code Playgroud)
错误看起来像:
def get(self, *args, raw=False, vars=None):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我希望能够通过几种方式调用该方法:
f = Foo()
f.get(arg1, arg2)
f.get(arg1, raw=True)
f.get(arg1, arg2, raw=True, vars=something)
Run Code Online (Sandbox Code Playgroud)
等等
python python-2.x variadic-functions named-parameters default-parameters
有相关的问题,例如如何将2个参数传递给AsyncTask类?但是我遇到了徒劳地尝试将多个原语作为参数传递给AsyncTask的困难,所以我想分享我发现的东西.在现有的问题和答案中没有捕捉到这种微妙之处,所以我想帮助那些遇到与我一样的问题的人,并为他们省去痛苦.
问题是:我有多个原始参数(例如两个long),我想传递给AsyncTask以在后台执行 - 它怎么能完成?(我的回答......经过一段时间的挣扎......可以在下面找到.)
我有一个类,它包含一个"错误"函数,可以格式化一些文本.我想接受可变数量的参数,然后使用printf格式化它们.
例:
class MyClass
{
public:
void Error(const char* format, ...);
};
Run Code Online (Sandbox Code Playgroud)
Error方法应该接受参数,调用printf/sprintf来格式化它然后用它做一些事情.我不想自己编写所有格式,因此尝试找出如何使用现有格式是有意义的.
如何计算可变参数模板函数的参数数量?
即:
template<typename... T>
void f(const T&... t)
{
int n = number_of_args(t);
...
}
Run Code Online (Sandbox Code Playgroud)
number_of_args在上面实现的最佳方法是什么?
我需要一个函数,它接受任意数量的参数(所有相同的类型),对它们做一些事情然后给出一个结果.在我的具体情况下,参数列表是不切实际的.
当我查看haskell库时,我看到函数printf(来自模块Text.Printf)使用了类似的技巧.不幸的是,通过查看来源我无法理解这种魔力.
有人可以解释如何实现这一点,或至少一些网页/纸/任何我可以找到一个良好的描述吗?
动机:
我需要它的原因非常简单.对于学校(计算机科学课),我们需要编写一个能够"记录"数学表达式,将其表示为字符串的模块(通过为自己的数据类型编写Num/Real/etc的实例),并执行对它的各种操作.
此数据类型包含变量的特殊构造函数,可以由值或指定函数的任何值替换.其中一个目标是编写一个函数,它使用一些变量(类型对(Char,Rational))来表达这种表达式并计算表达式的结果.我们应该看看如何最好地表达函数的目标.(我的想法:该函数返回另一个函数,它接受与函数中定义的变量一样多的参数 - 似乎是不可能的).
我有大约30个可变函数.每个人都接受一个路径作为最终参数,例如:
bool do_foo(struct *f, int q, const char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)
在每个函数中,我必须检查扩展格式是否小于或等于特定大小.所以,我发现自己复制/粘贴相同的代码块来检查vsnprintf()没有打印多少个字符,相应地设置并保留errno写入.
我想要做的是编写一个函数来执行此操作,这将返回一个已知为安全大小的静态分配(扩展)字符串,或者在失败时新初始化的字符串,可以针对NULL进行检查.检查还必须确定字符串是绝对路径还是相对路径,这会影响字符串的安全大小.这是很多重复的代码,它开始闻起来.
有没有办法可以将elipsis的内容从我的函数的条目传递给另一个函数?或者我必须先调用va_start(),然后传递va_list给辅助函数?
编辑:
我完全不反对把它传递va_list给帮助者,我只是想确保没有别的东西存在.在我看来,编译器理解可变参数的开始位置,所以我只是好奇我是否可以告诉它传递它们.
我对Java的varargs方法有点困惑:
public static int sum(int ...a) {
return 0;
}
public static double sum(double ...a) {
return 0.0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在sum()不传递任何参数的情况下调用时,则int调用了方法的版本.我不明白为什么; 通常编译器必须引发错误.
相反,当我尝试在sum没有任何参数的情况下调用时,以下代码段会生成编译器错误:
public static int sum(int ...a) {
return 0;
}
public static boolean sum(boolean ...a) {
return true;
}
Run Code Online (Sandbox Code Playgroud) 这个语法对以下内容有用:
function(String... args)
Run Code Online (Sandbox Code Playgroud)
和写作一样吗?
function(String[] args)
Run Code Online (Sandbox Code Playgroud)
仅在调用此方法时有区别或是否还有其他功能?
java ×4
c ×2
c++ ×2
android ×1
c++11 ×1
generics ×1
haskell ×1
methods ×1
null ×1
overloading ×1
polyvariadic ×1
primitive ×1
printf ×1
python ×1
python-2.x ×1