-
java方法 按照引用传递一个对象,怎样避免修改对象内容10
比如说一个java Bean
public class UserDto{
private TableDto table;
private KnifeDto knife;
……
}
方法 changeDto(UserDto userDto){
}
比如我只想在方法里面修改table,并不想对里面的knife进行修改。为了防止knife的内容被修改。应该怎么办???
问题补充:用final去定义的话,则无论何时都不能修改了,只是为了限制在changeDto此方法不能修改(set),其它方法可以允许set。怎么办??
问题补充:robertliudeqiang 写道引用java方法 按照引用传递一个对象,怎样避免修改对象内容
根据“effective java”,标准的方法是把对象实现成一个"immutable object",这样,调用改对象的任何方法都不会改变对象的状态,一般是生产一个新的对象。
不是不允许修改 是在某些方法不允许修改 有些方法允许修改
这样怎么弄 用clone的思路和步骤是什么?能否详细解答一下呢?
2010年3月20日 20:57
9个答案 按时间排序 按投票排序
-
对这两个变量均不提供set方法
private TableDto table;
private KnifeDto knife;
仅仅提供get方法
因为get提供的是引用 所以table和knife的内容还是可以修改的
而针对lz"某些方法可以修改 某些方法不可以修改"的需求
可以在TableDto类型内部的方法进行控制
针对某些方法则进行修改,而另一些不具备权限的方法则直接返回~2010年3月22日 16:55
-
另外,java里不建议直接使用clone的,这个方法有很多局限性,具体原因可以参考"effective java"
2010年3月21日 14:31
-
引用用clone的思路和步骤是什么?能否详细解答一下呢?
可以使用拷贝构造器(copy constructor), 在不允许修改对象内部状态的方法里为当前对象生成一个拷贝构造。
可以参考
http://www.javapractices.com/topic/TopicAction.do?Id=12
2010年3月21日 14:30
-
你的需求算是了解了,
你是想在某些方法不允许修改 有些方法允许修改 ,
那你可以针对那些方法进行aop代理,设置哪些方法可访问,哪些方法访问就抛异常
可参考aop实现
http://robert.blog.51cto.com/374512/830402010年3月21日 10:45
-
引用java方法 按照引用传递一个对象,怎样避免修改对象内容
根据“effective java”,标准的方法是把对象实现成一个"immutable object",这样,调用改对象的任何方法都不会改变对象的状态,一般是生产一个新的对象。2010年3月21日 07:28
-
楼主的意思应该是knife里面的属性不能变吧
所以
1. final是不管用的
2. 保证UserDto 不能更改 knife的引用
3. knife的属性不被更改(可以不提供set方法)或者 当别的地方想要用knife的时候,程序可以clone一个出来2010年3月20日 21:46
-
好像也不行
估计得在传值前,再封装那个对像,
把UserDto里的
table提供GET,SET方法
knife只提供GET方法
public class UserDtowrap{ private TableDto table; private KnifeDto knife; …… } main(){ UserDto _u UserDtowrap _uw = new UserDtowrap(_u); changeDto(_uw); } changeDto(UserDtowrap userDto){ }
或者用拦劫 方法,(但个人觉得没做成像SPRING配置那样,这个更麻烦)
2010年3月20日 21:10
相关推荐
综上所述,在Java中,对于基本数据类型的参数传递实际上是按值传递,而对于对象类型的参数传递则是按引用传递的一种特殊形式——传递的是对象引用的副本,但由于这些副本指向同一个对象,因此对对象的修改会影响到...
Java 面向对象值传递和引用传递 Java 面向对象编程中,参数传递是非常重要的一个概念。参数传递有两种方式:值传递和引用传递。了解这两种方式的区别是非常重要的,因为它们对程序的执行结果产生了很大的影响。 值...
在Java编程语言中,面向对象特性是其核心概念之一,其中引用来传递对象是一个非常重要的知识点。本教程将深入探讨Java中的引用传递机制,并通过视频教程的形式帮助学习者更好地理解和应用这一概念。 首先,理解...
例如,可以使用Java的`System.identityHashCode()`方法来验证不同引用是否指向同一个对象,或者使用调试器来查看方法调用时的实际参数传递。 总的来说,理解Java中的值传递和对象引用传递对于编写高效、无误的代码...
因此,当在方法内修改对象的属性`value`时,会影响到原始对象,因为两个引用都指向同一个内存位置。 值传递和引用传递的主要区别在于: 1. 变量的修改:值传递的参数在方法内部的任何修改都不会影响原始变量;引用...
然而,这里有一个关键点需要注意,Java并不支持真正的引用传递,而是使用"传对象的引用副本"来模拟引用传递的效果。 ```java class Box { int value; public void setValue(int val) { this.value = val; } } ...
在Java中,“=”符号并不意味着两个对象之间的赋值,而是一个指向对象地址的传递。例如: ```java A a3 = new A(); A a4 = new A(); a3 = a4; // 此时a3和a4都指向同一个由new A()创建的对象 ``` 这里需要...
` 方法中对`s`的修改会影响原始`sMain`所指向的对象,因为它们指向同一个对象。 #### 四、案例分析 为了更好地理解这些概念,我们可以分析给定代码示例中的几个关键部分: 1. **基本类型参数传递**:在`...
实际上,Java通过传递对象引用的方式,实现了类似引用传递的效果。以下是对这两种传递方式的详细解释。 1. 按值传递 按值传递是指在函数调用时,实际传递的是参数变量的副本,而不是原始变量本身。这意味着在函数...
这意味着对于引用类型的参数,如果在方法内部修改了引用所指向的对象,那么这些更改会影响到原始对象。 综上所述,理解Java中对象与引用之间的关系对于有效地使用面向对象编程至关重要。通过明确区分对象和引用,并...
- **分析**:尽管 `str1` 是一个引用类型,但由于 `String` 类是不可变的,所以即使 `change` 方法尝试修改 `str2`,也只是创建了一个新的 `String` 对象,并未改变 `str1` 指向的对象。 #### 五、结论 - Java中的...
许多人认为对象是按引用传递,而实际上,Java总是按值传递,包括对象。这里的“值”指的是对象的引用,而不是对象本身。这与C++或C#等其他语言中对象的传递方式有所不同。 首先,我们需要理解Java中的引用概念。当...
在Java编程中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C和C++)进行交互。当我们需要高效地处理数据、利用特定平台的库或者优化性能时,JNI就显得尤为重要。本文将深入探讨...
由于是引用传递,`b`和`a_book`都是指向同一个对象的引用,因此在方法调用之后,`b`对象的值发生了变化。 总结来说,值传递和引用传递是Java中处理参数传递的两种机制。理解这两者的差异对于正确处理方法调用和对象...
在Java中,所有的参数传递都是按值传递,这意味着当我们将一个变量作为参数传递给方法时,实际传递的是该变量的副本,而不是变量本身。因此,对于基本类型(如int,double等),方法内部对参数的修改不会影响到外部...
- **引用传递的本质**:Java中的引用传递本质上是传递对象的引用,而不是对象本身。这意味着在方法内部对对象所做的任何改变都会影响到原始对象。 - **引用与值的区别**:与基本类型的值传递不同,引用传递不会创建...
Java的参数传递方式实际上是一种特殊的"值传递",通常被称为"按引用传递对象的引用",这与C++等语言中的引用传递有所不同。以下是对这个主题的详细解释。 在Java中,所有的参数传递都是基于值的,但这涉及到一个...
- Java中的`String`类是不可变的,这意味着一旦创建了一个`String`对象,就不能更改它的内容。因此,当我们传递`String`对象作为参数时,看起来像是按值传递。例如,如果在方法中创建了一个新的`String`对象,这...
Java中的参数传递方式主要有两种:值传递和引用传递。理解这两种机制是编程中至关重要的,因为它们直接影响到函数内部如何改变或操作传入的数据。 **值传递**在Java中是基本数据类型(如int, double, char等)的...
而在Java中,由于没有真正的引用传递,实际上所有的对象参数都是通过引用传递的,也就是说,传递的是对象在内存中的地址,而不是对象本身的一个副本。这意味着当一个对象作为参数传递给方法时,方法可以访问并修改该...