Java中的惰性参数类型?

Java中的惰性参数类型?,java,methods,parameters,casting,Java,Methods,Parameters,Casting,我有一个关于Java中参数传递的问题。假设我有一个方法: public void x(Object o) 比方说,我叫x(3)和x(“abc”)。x(3)将花费更多的时间,因为构造了一个新的整数,因为3不是一个对象。假设我不能更改方法调用,只能更改方法实现(和参数类型),有没有办法在方法x中的某个点(我知道它确实需要)之前防止这种整数构造 谢谢, Teo不,Java没有办法让它按照您描述的方式惰性地计算方法的参数 Java语言规范的一部分准确地解释了方法调用是如何工作的,以及在调用方法之前如何

我有一个关于Java中参数传递的问题。假设我有一个方法:

public void x(Object o)
比方说,我叫x(3)和x(“abc”)。x(3)将花费更多的时间,因为构造了一个新的整数,因为3不是一个对象。假设我不能更改方法调用,只能更改方法实现(和参数类型),有没有办法在方法x中的某个点(我知道它确实需要)之前防止这种整数构造

谢谢,
Teo

不,Java没有办法让它按照您描述的方式惰性地计算方法的参数


Java语言规范的一部分准确地解释了方法调用是如何工作的,以及在调用方法之前如何计算方法的参数。

不,Java没有办法让它以您描述的方式惰性地计算方法的参数

Java语言规范的一部分准确地解释了方法调用是如何工作的,以及在调用方法之前如何计算方法的参数。

1)没有办法推迟对象的创建

2) 差异将非常小,您无需在意

1)无法推迟对象创建


2) 如果方法x只处理整数而不是任何其他类型的对象,那么您可以将该方法更改为

public void x(int x){
//做点什么,然后根据需要创建对象。
}


但在您的情况下,该方法将接受任何类型的对象,因此除了创建新的整数对象外,没有其他方法。

如果方法x仅处理整数而不是任何其他类型的对象,则可以将该方法更改为

public void x(int x){
//做点什么,然后根据需要创建对象。
}


但是在您的情况下,该方法将接受任何类型的对象,因此除了创建一个新的整数对象之外,没有其他方法。

您可以创建一个延迟计算的对象,如Callable

public void method(Callable<Object> callable) {
    // if you really need it
    Object obj = callable.call();
}


后面的示例避免创建大量的
x

变体,您可以创建一个延迟计算的对象,如Callable

public void method(Callable<Object> callable) {
    // if you really need it
    Object obj = callable.call();
}


后面的示例避免创建大量的
x

变体,为什么不像x(int)那样重载它呢?@John不,不是。自动装箱的工作原理是调用方法
Integer.valueOf(3)
,该方法实际上会返回一个缓存的
Integer
对象。如果使用
new
,则始终会创建一个新对象;这将不会得到缓存对象。@Jesper:是。我的意思是说值为3的Integer对象被缓存。@Jesper:我删除了我的注释,因为它不清楚。我的方法实际上是这样的
void x(object o1,object o2,…)
我有7个这样的签名,因为我希望我的方法能够接受7个参数。出于性能原因,我没有使用数量可变的参数。所以问题是我无法知道哪一个对象是int。为什么不像x(int)那样重载它呢?@John不,不是。自动装箱的工作原理是调用方法
Integer.valueOf(3)
,该方法实际上会返回一个缓存的
Integer
对象。如果使用
new
,则始终会创建一个新对象;这将不会得到缓存对象。@Jesper:是。我的意思是说值为3的Integer对象被缓存。@Jesper:我删除了我的注释,因为它不清楚。我的方法实际上是这样的
void x(object o1,object o2,…)
我有7个这样的签名,因为我希望我的方法能够接受7个参数。出于性能原因,我没有使用数量可变的参数。所以问题是我无法知道哪一个对象是int。
public void x(long l);
public void x(double d);