由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - 一个简单的Java问题
相关主题
网上信用卡支付的java code怎么写?What's your habit to document this?
请问一个有关选择数据结构的问题display field validation message with the field
Sun One Studio 中如何enable assert怎么把其他form加到richtext box( FCKeditor)?
为什么Arrays.asList()不做autoboxing?Anyone know SAML 2.0 and OpenSAML ?
Re: Where can i find this package?弱问 如何在Eclipse 下 run java -ea command
求助Java Image Tools or APIfunctional programming why? (转载)
纽约附近的兄弟有想一起做个交易系统的吗?jar 的问题, 路径有问题? 大家帮忙看看是啥毛病?
Re: 想起几年前Re: run servlet from command li请教。。
相关话题的讨论汇总
话题: data话题: validate话题: api话题: int话题: proxy
进入Java版参与讨论
1 (共1页)
Y**G
发帖数: 1089
1
现在别人实现了一个API, 姑且叫API.validate(int[] data) {...}
现在假设下面两个条件:
(1) 这个API的signature是事先定好的,我无法或者无权修改。
(2) 这个API应该对数组data做只读操作,不可以修改data中元素的值。
我对这个API不太放心,担心validate破坏data中的元素值。最初的想法是在data的基
础上创建一个proxy对象,让proxy对象来检测validate是否写了,如果我的proxy探测
到validate破坏了数据,我可以assert然后别人会去修复validate中的bug。但是好像
int[]没有实现什么接口,无法产生proxy。
我现在只好将data的一个copy传递给validate,可是如果data比较长的话开销是比较大
的。
有比较好的检查validate是否破坏数据的方法吗?
d****i
发帖数: 4809
2
没有完全理解你的意思,用个测试不就可以知道validate是不是改写了data了吗?比如
检查输出是不是原来的数组。
public class ArrayAPI {
//suppose this method changes data
public static void validate(int[] data) {
for(int i=0; i data[i] *= 2;
}
}
public static void main(String[] args) {
int[] local = new int[] {1, 2, 3, 4, 5};
ArrayAPI.validate(local);
System.out.println(Arrays.toString(local));
}
}

【在 Y**G 的大作中提到】
: 现在别人实现了一个API, 姑且叫API.validate(int[] data) {...}
: 现在假设下面两个条件:
: (1) 这个API的signature是事先定好的,我无法或者无权修改。
: (2) 这个API应该对数组data做只读操作,不可以修改data中元素的值。
: 我对这个API不太放心,担心validate破坏data中的元素值。最初的想法是在data的基
: 础上创建一个proxy对象,让proxy对象来检测validate是否写了,如果我的proxy探测
: 到validate破坏了数据,我可以assert然后别人会去修复validate中的bug。但是好像
: int[]没有实现什么接口,无法产生proxy。
: 我现在只好将data的一个copy传递给validate,可是如果data比较长的话开销是比较大
: 的。

Y**G
发帖数: 1089
3
API是别人写的。上千行代码俺懒得看,就是看上去没问题或者简单测试一下没问题也
没把握上产品线没问题。俺现在只能defensive programming了,只传一个copy

【在 d****i 的大作中提到】
: 没有完全理解你的意思,用个测试不就可以知道validate是不是改写了data了吗?比如
: 检查输出是不是原来的数组。
: public class ArrayAPI {
: //suppose this method changes data
: public static void validate(int[] data) {
: for(int i=0; i: data[i] *= 2;
: }
: }
: public static void main(String[] args) {

N***m
发帖数: 4460
4
what about md5?
say you have 1M array elements,
you partition it into 100 sub arrays, do md5 for each of them,
store md5 since md5 is 16 bytes, it is not a big deal, you will only need
100*16 size to store.you also need byte array to hold subarray which is ~ as
each subarray, which is >> 100*16, so the extra memory cost is this guy, ie
10K. which is just 1/100 of original size.
b***i
发帖数: 3043
5
你不能中间转移一下?
MYAPI.validate(final int[] data){
API.valiate(data)
}

【在 Y**G 的大作中提到】
: 现在别人实现了一个API, 姑且叫API.validate(int[] data) {...}
: 现在假设下面两个条件:
: (1) 这个API的signature是事先定好的,我无法或者无权修改。
: (2) 这个API应该对数组data做只读操作,不可以修改data中元素的值。
: 我对这个API不太放心,担心validate破坏data中的元素值。最初的想法是在data的基
: 础上创建一个proxy对象,让proxy对象来检测validate是否写了,如果我的proxy探测
: 到validate破坏了数据,我可以assert然后别人会去修复validate中的bug。但是好像
: int[]没有实现什么接口,无法产生proxy。
: 我现在只好将data的一个copy传递给validate,可是如果data比较长的话开销是比较大
: 的。

Y**G
发帖数: 1089
6
final在这里没用的

【在 b***i 的大作中提到】
: 你不能中间转移一下?
: MYAPI.validate(final int[] data){
: API.valiate(data)
: }

x****d
发帖数: 1766
7
do you use spring framework? if so, 无法或者无权修改 doesn't matter. you can
use mothodreplacer.
to my believe, you can at least prevent it from changing your data,
basically you just copy the original method code, and just add a few simple
test to compose the new replacing code. don't have to pass copy.
if possible, you can replace the whole old method with something you trust,
but your said you don't want to read into the old code,...

【在 Y**G 的大作中提到】
: 现在别人实现了一个API, 姑且叫API.validate(int[] data) {...}
: 现在假设下面两个条件:
: (1) 这个API的signature是事先定好的,我无法或者无权修改。
: (2) 这个API应该对数组data做只读操作,不可以修改data中元素的值。
: 我对这个API不太放心,担心validate破坏data中的元素值。最初的想法是在data的基
: 础上创建一个proxy对象,让proxy对象来检测validate是否写了,如果我的proxy探测
: 到validate破坏了数据,我可以assert然后别人会去修复validate中的bug。但是好像
: int[]没有实现什么接口,无法产生proxy。
: 我现在只好将data的一个copy传递给validate,可是如果data比较长的话开销是比较大
: 的。

y*********r
发帖数: 94
8
比较调用前后该数组的hash code?
q******3
发帖数: 166
9
没用的,你的意思就是比较两组int[] 是不是一样,那只能每个元素都比较过来,不能
漏掉一个
再不就是override这个validate,
用final?
q******3
发帖数: 166
10
再不就是写个承局,随机生成n个int[],写个程序比较一下,如果没问题,然后就这
么用吧。
q******3
发帖数: 166
11
再不就是写个承局,随机生成n个int[],写个程序比较一下,如果没问题,然后就这
么用吧。
g*****g
发帖数: 34805
12
不放心做个拷贝不就完了吗。
a*w
发帖数: 4495
13
这个时间开销比拷贝还大吧。

【在 y*********r 的大作中提到】
: 比较调用前后该数组的hash code?
1 (共1页)
进入Java版参与讨论
相关主题
请教。。Re: Where can i find this package?
java image processing problem求助Java Image Tools or API
如何复制一个二维数组?纽约附近的兄弟有想一起做个交易系统的吗?
新手问个java蠢问题!Re: 想起几年前Re: run servlet from command li
网上信用卡支付的java code怎么写?What's your habit to document this?
请问一个有关选择数据结构的问题display field validation message with the field
Sun One Studio 中如何enable assert怎么把其他form加到richtext box( FCKeditor)?
为什么Arrays.asList()不做autoboxing?Anyone know SAML 2.0 and OpenSAML ?
相关话题的讨论汇总
话题: data话题: validate话题: api话题: int话题: proxy