gpt4 book ai didi

java - DRY 最大值跟踪

转载 作者:行者123 更新时间:2023-11-30 03:48:43 24 4
gpt4 key购买 nike

假设我正在导入表条目,其中单个条目可以存储在一个类中:

class Foo {
int i1;
int i2;
double d1;
}

导入完成后,我将需要访问导入的值本身及其规范化版本。到目前为止,我已实现此功能如下:

class FooWithMaxTracking {
private int i1;
private static int i1_max=0;
public void setI1(int value){
this.i1 = value;
if (value > i1_max) { i1_max = value; }}
public int getI1(){
return i1;}
public double normI1(){
return i1/((double)i1_max);}

private int i2;
private static int i2_max=0;
public void setI2(int value){ <code identical to written above> }
public int getI2(){ ... }
public double normI2(){ ... }

// and another set of similar 2 variables & 3 functions for 'double d1'
}

在这个实现中,我非常不喜欢这样的事实:我必须多次编写相同的代码(在本例中只有三次,但在实际项目中大约十次)。有没有什么方法可以让代码更加 DRY(“不要重复自己”)?

最佳答案

如果您不介意稍微损失一点性能,您可以将所有最大值放入静态Map中,定义一个包含 getter、setter 和范数方法的类,然后替换具有该类实例的各个变量:

private static Map<String,Object> max = new HashMap<String,Object>();
private static class IntMaxTrack {
private final String key;
private int value;
public IntMaxTrack(String k, int v) {
key = k;
value = v;
max.put(key, value);
}
public int get() { return value; }
public void set(int v) {
int m = ((Integer)max.get(key)).intValue();
value = v;
if (value > m) {
max.put(key, value);
}
}
public double norm() {
int m = ((Integer)max.get(key)).intValue();
return val / ((double)m);
}
}

double创建一个类似的类,即DblMaxTrack 现在您可以用这些类的实例替换基元,并调用它们的getsetnorm 来自类的相应方法。

关于java - DRY 最大值跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com