Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用方法为对象分配其自身的修改版本-不好的做法?_Java_Performance_Class_Structure - Fatal编程技术网

Java 使用方法为对象分配其自身的修改版本-不好的做法?

Java 使用方法为对象分配其自身的修改版本-不好的做法?,java,performance,class,structure,Java,Performance,Class,Structure,我简短地说: public aClass[] changeClassSlightly(aClass[] ac) { // changing various things in the class // changes done return ac; } 同时,大体上: aClass test = new aClass(); test = changeClassSlightly(test); 所以, 当想要将某个类的功能实现到另一个类中时,这是一种效率低下/被看不起的方

我简短地说:

public aClass[] changeClassSlightly(aClass[] ac) {
    // changing various things in the class
    // changes done
    return ac;
}
同时,大体上:

aClass test = new aClass();
test = changeClassSlightly(test);
所以, 当想要将某个类的功能实现到另一个类中时,这是一种效率低下/被看不起的方式还是不标准的方式

在我的例子中,这里所谓的“aClass”是一个相当简单的类,但是当这些东西变得越来越大时,将整个对象取出并稍微更改它可能被认为是糟糕的编程

是吗?这是数据结构不好的征兆还是Java开发中的常见做法


提前非常感谢,也感谢你对我的支持:)

我在这里看到两个不同的问题。在
changeClasslight(…)
的内部,看起来您正在讨论如何对
ac
参数进行变异。您问题中的代码似乎也在询问局部变量重用,因为
test
既是参数,也是包含
changeClasslight(…)
返回值的变量

一般来说,我个人更喜欢使用不可变对象和数据结构。我也尽量避免改变论点。请参阅有效Java,第15项:最小化可变性

如果一个函数是纯函数,通常更容易推理

但这在很大程度上是一个意见问题


至于重用局部变量:我也尽量避免这样做,但这两种方法都没有什么大不了的。

我在这里看到两个不同的问题。在
changeClasslight(…)
的内部,看起来您正在讨论如何对
ac
参数进行变异。您问题中的代码似乎也在询问局部变量重用,因为
test
既是参数,也是包含
changeClasslight(…)
返回值的变量

一般来说,我个人更喜欢使用不可变对象和数据结构。我也尽量避免改变论点。请参阅有效Java,第15项:最小化可变性

如果一个函数是纯函数,通常更容易推理

但这在很大程度上是一个意见问题


至于重用局部变量:我也尽量避免这样做,但这两种方法都没有什么大不了的。

从性能角度看,您的代码并不理想。如果可以在构造函数中设置值,则可以使用final字段(不可变,因此始终是线程安全的,并且易于JVM优化)。此外,构造函数中设置的值可以安全地读取,而无需同步。如果以后使用setter,则需要同步,否则可能无法在其他线程中获得新值。同步不像以前那样昂贵,但应该尽可能避免


我建议改为。

从性能角度看,您的代码并不理想。如果可以在构造函数中设置值,则可以使用final字段(不可变,因此始终是线程安全的,并且易于JVM优化)。此外,构造函数中设置的值可以安全地读取,而无需同步。如果以后使用setter,则需要同步,否则可能无法在其他线程中获得新值。同步不像以前那样昂贵,但应该尽可能避免


我建议你改为。

你的类型让我有点困惑。该方法具有返回类型
aClass[]
,但您将其视为返回了
aClass
。您的类型让我有点困惑。该方法具有返回类型
aClass[]
,但您将其视为返回
aClass