由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - java如何保护传入的参数不被函数改动?
相关主题
mutating input argument不应该鼓励吧C++ vs Java
FP更接近人的思维从今天开始起,学C++!
design pattern比语言重要怎么这里这么多人学python
请有C++数值计算的同学帮忙看看,问题不难Haskell很难学。。
C++ 有没有像go routine/channel 一样的库/框架?粉FP的人是因为把电脑想象成图灵机了
在C++里处理string用什么比较好?functional programming?
能否创立一个functional programming的版面Python Q: function pass in struct pointer, come back with data filled
设计一个string class,是应该用linked list还是array?也谈OOP跟FP之争
相关话题的讨论汇总
话题: const话题: java话题: c++话题: immutable话题: fields
进入Programming版参与讨论
1 (共1页)
s*i
发帖数: 388
1
java如何保护传入的参数不被函数改动?
类似cpp的
func(SomeDataStructure m_ds) const{}
如何实现?
X****r
发帖数: 3557
2
Java does not have the same 'const' thing as in C++.
Use immutable objects.

【在 s*i 的大作中提到】
: java如何保护传入的参数不被函数改动?
: 类似cpp的
: func(SomeDataStructure m_ds) const{}
: 如何实现?

g*****g
发帖数: 34805
3
Make the object immutable by marking every field final,
note if you have to do it on every field object instance as well.

【在 s*i 的大作中提到】
: java如何保护传入的参数不被函数改动?
: 类似cpp的
: func(SomeDataStructure m_ds) const{}
: 如何实现?

N***m
发帖数: 4460
4
如果你用别人写好的类该怎么办?

【在 g*****g 的大作中提到】
: Make the object immutable by marking every field final,
: note if you have to do it on every field object instance as well.

g**e
发帖数: 6127
5
clone一个,先serialize,再unserialize

【在 N***m 的大作中提到】
: 如果你用别人写好的类该怎么办?
g*****g
发帖数: 34805
6
没有啥办法,从OOP的角度讲,谁可以访问接口并改动数据是由
方法的restricter决定的。如果数据不该被改动,那类本身应该
是immutable。如果是有时候可以有时候不可以,那应该由caller
来负责数据的integrity。

【在 N***m 的大作中提到】
: 如果你用别人写好的类该怎么办?
N***m
发帖数: 4460
7
这个太麻烦了。很奇怪为啥JAVA不搞一个类似于const的东西

【在 g**e 的大作中提到】
: clone一个,先serialize,再unserialize
N***m
发帖数: 4460
8
为啥不能向C++一样由compiler来判断呢?

【在 g*****g 的大作中提到】
: 没有啥办法,从OOP的角度讲,谁可以访问接口并改动数据是由
: 方法的restricter决定的。如果数据不该被改动,那类本身应该
: 是immutable。如果是有时候可以有时候不可以,那应该由caller
: 来负责数据的integrity。

s******n
发帖数: 876
9

Java designers didn't think it's a useful feature.
Interestingly, "const" is a keyword in Java. The spec says
"The keywords const and goto are reserved, even though they are not
currently used. This may allow a Java compiler to produce better error
messages if these C++ keywords incorrectly appear in programs."
So it was not reserved for possible future come back.
Some people do find "const" useful, and there are libraries that implement
it for Java based on annotations.
Personally I think there is such a thing called too much static constraints,
and const is one of them.

【在 N***m 的大作中提到】
: 为啥不能向C++一样由compiler来判断呢?
s*i
发帖数: 388
10
final好像是保护你的这个pointer/reference不能被赋值吧?怎么能保护内容呢?

【在 g*****g 的大作中提到】
: Make the object immutable by marking every field final,
: note if you have to do it on every field object instance as well.

相关主题
在C++里处理string用什么比较好?C++ vs Java
能否创立一个functional programming的版面从今天开始起,学C++!
设计一个string class,是应该用linked list还是array?怎么这里这么多人学python
进入Programming版参与讨论
g*****g
发帖数: 34805
11
Of course you can if you do it on the fields and the referenced
instances too.

【在 s*i 的大作中提到】
: final好像是保护你的这个pointer/reference不能被赋值吧?怎么能保护内容呢?
N***m
发帖数: 4460
12
I see. hehe, although I still feel strange that java designers
didn't view const a useful feature. It is almost certain that introducing
const feature does have advantage just as in c++, then, what makes java
designers think with compromise, i.e.what's the disadvantage of doing so?

constraints,

【在 s******n 的大作中提到】
:
: Java designers didn't think it's a useful feature.
: Interestingly, "const" is a keyword in Java. The spec says
: "The keywords const and goto are reserved, even though they are not
: currently used. This may allow a Java compiler to produce better error
: messages if these C++ keywords incorrectly appear in programs."
: So it was not reserved for possible future come back.
: Some people do find "const" useful, and there are libraries that implement
: it for Java based on annotations.
: Personally I think there is such a thing called too much static constraints,

s*i
发帖数: 388
13
could u make up an example so we could understand better? thanks a lot!

【在 g*****g 的大作中提到】
: Of course you can if you do it on the fields and the referenced
: instances too.

g*****g
发帖数: 34805
14
If you declare a class and all its fields final, and all fields class
have all fields final recursively, then it's immutable.

【在 s*i 的大作中提到】
: could u make up an example so we could understand better? thanks a lot!
c*****t
发帖数: 1879
15
const 一个主要问题是 propagation 。C++ 里面某些情况下会出现一行
代码里面需要七八个 const 。写过 container class 人会有感触,为了
一个 const 有 N 个 implementation 。另外的时候 A 是不和
A 兼容的。所以,很多时候 const 弊大于利。
从另外一个方面来看,代码的很多东西其实不能完全靠 signature 来搞定。
有那么多功夫,把 documentation 写好,比如详细的 JavaDoc 会带来更
多的好处。
至于用 serialization / cloning 等办法,是在并行的情况下,弄一个
snapshot 。比如,shoppingCart.getList() 最好弄个 list clone 。
这样,caller 得到 list 后可以干些花时间的事,却不需要一直 lock
该 shoppingCart 。
其实,我觉得 C++ 的 const 其实就是一种变相的 preemptive optimization。
这是 C++ 语言作者 BS 一个 constradiction 。一方面鼓吹不需要
preemptive optimization ,但是另一方面 const 的接触面太广。很多
情况根本没办法避免。

【在 N***m 的大作中提到】
: 这个太麻烦了。很奇怪为啥JAVA不搞一个类似于const的东西
X****r
发帖数: 3557
16
对,const对于简单的类来说相当于提供了一个几乎免费的对应immutable类,
还是很好用的。但是代码一但复杂涉及多个类的时候,特别是写template库的
情况,多个const的组合形式数目指数增长,还有各种自动转换或匹配的微妙优
先顺序,要保持全const-correctness极为麻烦。还是把immutable类分开
写有确定的界面好处理得多。

【在 c*****t 的大作中提到】
: const 一个主要问题是 propagation 。C++ 里面某些情况下会出现一行
: 代码里面需要七八个 const 。写过 container class 人会有感触,为了
: 一个 const 有 N 个 implementation 。另外的时候 A 是不和
: A 兼容的。所以,很多时候 const 弊大于利。
: 从另外一个方面来看,代码的很多东西其实不能完全靠 signature 来搞定。
: 有那么多功夫,把 documentation 写好,比如详细的 JavaDoc 会带来更
: 多的好处。
: 至于用 serialization / cloning 等办法,是在并行的情况下,弄一个
: snapshot 。比如,shoppingCart.getList() 最好弄个 list clone 。
: 这样,caller 得到 list 后可以干些花时间的事,却不需要一直 lock

N***m
发帖数: 4460
17
基本同意,呵呵。const如果不滥用的话,应该是没啥大问题的,特别是对于类的
终端使用者而言。相反,如果没有const,一些简单的情况可能会变得复杂。
毕竟,让编译器发现人为失误要好得多。

【在 c*****t 的大作中提到】
: const 一个主要问题是 propagation 。C++ 里面某些情况下会出现一行
: 代码里面需要七八个 const 。写过 container class 人会有感触,为了
: 一个 const 有 N 个 implementation 。另外的时候 A 是不和
: A 兼容的。所以,很多时候 const 弊大于利。
: 从另外一个方面来看,代码的很多东西其实不能完全靠 signature 来搞定。
: 有那么多功夫,把 documentation 写好,比如详细的 JavaDoc 会带来更
: 多的好处。
: 至于用 serialization / cloning 等办法,是在并行的情况下,弄一个
: snapshot 。比如,shoppingCart.getList() 最好弄个 list clone 。
: 这样,caller 得到 list 后可以干些花时间的事,却不需要一直 lock

s******n
发帖数: 876
18
In C++, const abuses you:)

【在 N***m 的大作中提到】
: 基本同意,呵呵。const如果不滥用的话,应该是没啥大问题的,特别是对于类的
: 终端使用者而言。相反,如果没有const,一些简单的情况可能会变得复杂。
: 毕竟,让编译器发现人为失误要好得多。

N***m
发帖数: 4460
19
hehe,I escape from c++ now:)
while in java, do not even have such a chance to be abused,sigh:)

【在 s******n 的大作中提到】
: In C++, const abuses you:)
1 (共1页)
进入Programming版参与讨论
相关主题
也谈OOP跟FP之争C++ 有没有像go routine/channel 一样的库/框架?
学FP不是为了写代码, 而是为了优秀的架构.在C++里处理string用什么比较好?
JS就应该杜绝OOP能否创立一个functional programming的版面
OOP里面的Object其实是actor设计一个string class,是应该用linked list还是array?
mutating input argument不应该鼓励吧C++ vs Java
FP更接近人的思维从今天开始起,学C++!
design pattern比语言重要怎么这里这么多人学python
请有C++数值计算的同学帮忙看看,问题不难Haskell很难学。。
相关话题的讨论汇总
话题: const话题: java话题: c++话题: immutable话题: fields