我正在尝试为每个对象分配属性。我无法修改Sigar库的FileSystemUsage类,所以我不得不创建另一个类来管理propoerties。
我正在生成对象的函数如下
private String getDiskUsage() {
try {
List<FileSystem> result = new ArrayList<FileSystem>();
org.hyperic.sigar.FileSystem[] fss = null;
fss = sig.getFileSystemList();
List<Integer> diskUsage = new ArrayList<Integer>();
String ioStat = "";
DiskMembers diskm = new DiskMembers();
for (int i = 0; i<fss.length; i++) {
FileSystem fs = fss[i];
if (fs.getType()==2) {
FileSystemUsage usage = sig.getFileSystemUsage(fs.getDirName());
if (diskm.getlastDiskCheck(i - 1) != 0) {
long diff = (nanoTime() - diskm.getlastDiskCheck(i - 1)) / 1000000;
long diffRead = usage.getDiskReadBytes() - diskm.getLastDiskRead(i - 1);
long diffWrite = usage.getDiskWriteBytes() - diskm.getlastDiskWrite(i - 1);
ioStat = String.format("(%d/%d kB/s)", diffRead / diff, diffWrite / diff);
}
diskm.setLastDiskRead(i, usage.getDiskReadBytes());
diskm.setlastDiskWrite(i, usage.getDiskWriteBytes());
diskm.setlastDiskCheck(i, nanoTime());
diskUsage.add((int) (usage.getUsePercent() * 100));
}
}
return String.format("%d%% %s", (Collections.max(diskUsage)), ioStat);
} catch (SigarException e) {
e.printStackTrace();
}
return "n/a";
}
我为管理每个对象的属性而创建的类是以下
class DiskMembers{
private long[] lastDiskCheck = new long[5];
private long[] lastDiskRead = new long[5];
private long[] lastDiskWrite = new long[5];
public DiskMembers(){
this.lastDiskCheck[0] = 0;
this.lastDiskRead[0] = 0;
this.lastDiskWrite[0] = 0;
}
public boolean setLastDiskRead(int i, long value){
this.lastDiskRead[i] = value;
return true;
}
public boolean setlastDiskCheck(int i,long value){
this.lastDiskCheck[i] = value;
return true;
}
public boolean setlastDiskWrite(int i,long value){
this.lastDiskWrite[i] = value;
return true;
}
public long getLastDiskRead(int i){
if (i==-1)
return this.lastDiskRead[0];
return this.lastDiskRead[i];
}
public long getlastDiskCheck(int i){
if (i==-1)
return this.lastDiskCheck[0];
return this.lastDiskCheck[i];
}
public long getlastDiskWrite(int i){
if (i==-1)
return this.lastDiskWrite[0];
return this.lastDiskWrite[i];
}
}
问题是我无法管理每个对象的属性。我的意思是当生成对象使用时,我通过调用diskm.getlastDiskCheck(i-1)来检查lastDickCheck变量。第一次它不会执行此部分代码,因为返回值为零(0)。但之后我会每次执行它,即使是不同的对象,只要它们是数组。我想为每个(磁盘)的每个对象“使用”保留“lastdiskcheck”的记录。
如果我更新磁盘C的lastDiskCheck变量:它也会为磁盘D选择它,我不知道。
我该怎么做?
答案 0 :(得分:0)
我会试着解释一下安装者和吸气剂的目标是什么。在您的情况下,有不同的问题需要解释。
在第一个函数getDiskUsage中,有一个私有方法。您只能从同一个类访问此方法。我不知道你的目标是否合适。
此外,如果你想访问三个不同的磁盘,我会实例3三个不同的对象,例如:DiskMembers [] disks = new DiskMembers [3]; // C D和E
在这种情况下,对于每个对象,您将访问getter / setter。您的类DiskMembers的属性应为:
private boolean _DiskCheck;
private boolean _DiskRead;
private boolean _DiskWrite;
每次修改磁盘时,都可以通过以下方式访问:disks [0] .set_DiskCheck()= true;
此外,在每种情况下,您都可以获得所需的一切。要检查最后一个磁盘是什么,可以添加另一个属性,例如date,保存上次修改的日期。
最后,我建议确保setter方法只保留值,而不是返回一些东西。在另一方面,您将获得getter,它返回private属性的值。另一个重要的事情是,如果您需要创建一个复杂的setter,最好创建更多可以使用此setter访问的方法。
PD:尝试获取面向Java面向对象的编程书并开始阅读,您将在短时间内提高您的水平。