我有一个Tuple mock类,其getString(0)和getString(1)方法应该被调用n次.而不是写一些像,
when(tuple.getString(0)).thenReturn(logEntries[0]).thenReturn(logEntries[1])...thenReturn(logEntries[n - 1])
Run Code Online (Sandbox Code Playgroud)
手动,我尝试了以下内容:
OngoingStubbing stubbingGetStringZero = when(tuple.getString(0)).thenReturn(serviceRequestKey);
OngoingStubbing stubbingGetStringOne = when(tuple.getString(1)).thenReturn(logEntries[0]);
for (int i = 1; i < n; i++) {
stubbingGetStringZero = stubbingGetStringZero.thenReturn(serviceRequestKey);
stubbingGetStringOne = stubbingGetStringOne.thenReturn(logEntries[i]);
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是所有调用都tuple.getString(0)应该返回String serviceRequestKey,每次调用都tuple.getString(1)应该返回一个不同的String,logEntries[i]即.ith调用tuple.getString(1)返回logEntries数组的第i个元素.
但是,由于一些奇怪的原因,事情正在混淆,第二次调用tuple.getString(1)返回String serviceRequestKey而不是logEntries[1].我在这里错过了什么?
我想知道...Java中的参数是如何工作的.例如:
public void method1(boolean... arguments)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
这是一个array吗?我应该如何访问参数?
class WrongOverloading{
void something(String [] a){ .. }
Integer something(String... aaa){ return 1;}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不能编译!编译器说这些是重复的方法.那么使用String数组或String var-args是否完全相同?
它们是如何在内部实施的?
我刚看到有人对数组使用这种替代语法,并且想知道:
是
public void fn(Character[]...){}
Run Code Online (Sandbox Code Playgroud)
相当于
public void fn(Character[]){} //(i.e. "..." is redundant)
Run Code Online (Sandbox Code Playgroud)
或者相当于
public void fn(Character[][]){}
Run Code Online (Sandbox Code Playgroud) 1)好的
List<int[]> listOfArrays1 = Arrays.asList( new int[]{1, 2} );
Run Code Online (Sandbox Code Playgroud)
2)好的
List<int[]> listOfArrays2 = Arrays.asList( new int[]{1, 2}, new int[]{3, 4} );
Run Code Online (Sandbox Code Playgroud)
3)编译错误 Type mismatch: cannot convert from List<Integer> to List<Integer[]>
List<Integer[]> listOfArrays3 = Arrays.asList( new Integer[]{1, 2} );
Run Code Online (Sandbox Code Playgroud)
4)好的
List<Integer[]> listOfArrays4 = Arrays.asList( new Integer[]{1, 2}, new Integer[]{3, 4} );
Run Code Online (Sandbox Code Playgroud)
这是签名asList:public static <T> List<T> asList(T... a)
asList期望0或更多类型为"a".我的"a"是new Integer[]{1, 2},它是类型Integer[].那么,为什么它会产生一个List<Integer>而不是一个List<Integer[]>?
我的目标是检查网络上的文件夹中是否找到具有特定(名称的一部分)的文件,同时考虑到其下面的所有文件夹。为此,我需要一种方法来有效获取给定文件夹中及其下的所有文件和文件夹的列表。我的递归函数在本地驱动器上每秒执行约 2500 个项目,但在网络驱动器上每秒仅执行几个项目。我需要更快的东西。
\n\n核心问题是:获取文件夹中的项目列表(包括属性 isDirectory 或类似属性)的最快方法是什么?
\n\n我寄希望于java.nio的walkFileTree功能,但我无法使用它。(版本:8.4.0.150421 (R2014b),采用 Java 1.7.0_11-b21,采用 Oracle Corporation Java HotSpot\xe2\x84\xa2 64 位服务器 VM 混合模式)
\n\n当前问题:我无法使用 java.nio 的任何功能
\n\njava.io 可以工作,例如创建一个文件对象:
\n\njFile = java.io.File('C:\\') \n% then use jFile.list or jFile.isDirectory or jFile.toPath, it all works!\nRun Code Online (Sandbox Code Playgroud)\n\n天真地调用 nio 失败:
\n\njava.nio.file.Files('C:\\') \n% -> No constructor 'java.nio.file.Files' with matching signature found.\nRun Code Online (Sandbox Code Playgroud)\n\n我意识到 java.nio.file 的工作方式有点不同,要使用 Files 中的方法,需要一个路径,可以使用 java.nio.file.Path.get 构造该路径。这东西吃一根绳子。但这也失败了:
\n\njava.nio.file.Paths.get('C:\\') % -> No method 'get' with matching signature found for class 'java.nio.file.Paths'.\n …Run Code Online (Sandbox Code Playgroud) 在Java语言规范的第15.12.2.5节中,它讨论了如何在具有固定arity的方法和可变arity方法(即varargs)中选择最具体的方法.
我在JLS中找不到的是关于两个方法之间的决定,其中一个是固定的arity,另一个是变量arity.例如:
public interface SomeApi {
public String getSomething(String arg); // method 1
public String getSomething(String ... args); // method 2
}
Run Code Online (Sandbox Code Playgroud)
按照人们的预期编译就好(由Yoni概述的原因如下).这个调用代码也编译:
SomeApi api = ...
Object o = api.getSomething("Hello");
Run Code Online (Sandbox Code Playgroud)
如果你运行它,method #1(即非varargs方法)被调用.为什么这个调用代码没有含糊不清?为什么固定arity方法比变量arity方法更具体?有人能指出我对规范的相关部分吗?
我的问题是此问题的Flex转置:
也就是说,我在一些Actionscript代码中有一个数组,我需要将数组中索引的每个对象传递给一个方法method(...arguments).
一些代码说清楚:
private function mainMethod():void{
var myArray:Array = new Array("1", "2", "3");
// Call calledMethod and give it "1", "2" and "3" as arguments
}
private function calledMethod(...arguments):void{
for each (argument:Object in arguments)
trace(argument);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做评论建议的内容?
为什么不编译?
public class PrimitiveVarArgs
{
public static void main(String[] args)
{
int[] ints = new int[]{1, 2, 3, 4, 5};
prints(ints);
}
void prints(int... ints)
{
for(int i : ints)
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
它抱怨第5行,说:
method prints in class PrimitiveVarArgs cannot be applied to given types;
required: int[]
found: int[]
reason: varargs mismatch; int[] cannot be converted to int
Run Code Online (Sandbox Code Playgroud)
但就我而言(和SO上的其他人所知),就像我int...一样int[].如果它是非基本类型,则可以工作String,但不是基元.
我甚至无法添加此方法:
void prints(int[] ints)
{
for(int i : ints)
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
因为编译器说:
name …Run Code Online (Sandbox Code Playgroud) 假设我有一个名为myCar的对象,它是Car的一个实例.
myCar = new Car();
Run Code Online (Sandbox Code Playgroud)
如何根据对象创建该类的新实例?假设我不知道myCar是从哪个类创建的.
otherObject = new myCar.getClass()(); // Just do demonstrate what I mean (I know this doesn't work)
Run Code Online (Sandbox Code Playgroud)
UPDATE
public class MyClass {
public MyClass(int x, int y, Team team) { }
public MyClass() { }
}
Object arg = new Object[] {2, 2, Game.team[0]};
try {
Constructor ctor = assignedObject.getClass().getDeclaredConstructor(int.class, int.class, Team.class);
ctor.setAccessible(true);
GameObject obj = (GameObject) ctor.newInstance(arg);
} catch (InstantiationException x) {
x.printStackTrace();
} catch (IllegalAccessException x) {
x.printStackTrace();
} catch (InvocationTargetException x) { …Run Code Online (Sandbox Code Playgroud) 我试图将代码库从Java移到Kotlin。但是我在String.format中发现了奇怪的行为。
我在Kotlin和Java中都有相同的代码(以及功能)。
fun callScriptMethod(methodName: String, vararg args: Any): String {
var format = methodName
if (!format.contains("javascript:")) {
format = String.format("javascript:%s", format)
}
val objects = mutableListOf<Any>()
for (arg in args) objects.add(arg)
if (!objects.isEmpty()) {
format += "("
var i = 0
val icnt = objects.size
while (i < icnt) {
format += "\'%s\'"
if (i != icnt - 1) {
format += ", "
}
i++
}
format += ")"
} else {
format += "()"
}
val message = …Run Code Online (Sandbox Code Playgroud) 我正在编写一个接收任意数量参数并返回修改的方法.我尝试过使用varargs但是它不起作用,在这里你可以看到代码的简化版本:
public static void main(String[] args) {
String hello = "hello";
String world = "world";
addPrefix(hello, world);
System.out.println("hello: " + hello + " world: " + world);
}
public static void addPrefix(String... elements) {
for (int i = 0; i < elements.length; i++) {
elements[i] = "prefix_" + elements[i];
}
for (int i = 0; i < elements.length; i++) {
System.out.println(elements[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
印刷结果:
prefix_hello
prefix_world
hello: hello world: world
Run Code Online (Sandbox Code Playgroud)
如您所见,在方法内部正确修改了值,但原始变量未更改.
我已经查看了很多页面,比如这里和这里,但似乎Java将vars的值复制到a Object[],因此引用丢失了.
知道我怎么能这样做?
在最近浏览各种程序时,我看到了以下代码:
protected Object doInBackground(Object... arg0)
{
....
....
....
}
Run Code Online (Sandbox Code Playgroud)
我不明白的意义 Object...
我从未见过...任何数据类型.