【问题标题】:How to use variables for each object如何为每个对象使用变量
【发布时间】:2015-09-30 11:26:22
【问题描述】:

我有一个元素数组。我正在根据每个元素名称制作对象并调用一些 getter 函数。我正在制作的类的对象实际上是第三方库“Sigar”。

问题是我不想修改这个第三方库,因此我无法为每个对象分别保存变量值。我需要想出一些方法来为每个对象保留单独的变量。

我希望我的描述能解释我想要什么。以下是我的代码

private long lastDiskCheck = 0;
private long lastDiskRead = 0;
private long lastDiskWrite = 0;
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 = "";
        for (int i = 0; i<fss.length; i++) {
            FileSystem fs = fss[i];
            FileSystemUsage usage = sig.getFileSystemUsage(fs.getDirName());
            if (lastDiskCheck!=0) {
                long diff = (nanoTime() - lastDiskCheck)/1000000;
                long diffRead = usage.getDiskReadBytes() - lastDiskRead;
                long diffWrite = usage.getDiskWriteBytes() - lastDiskWrite;
                ioStat = String.format("(%d/%d kB/s)", diffRead/diff, diffWrite / diff);
            }
            lastDiskRead = usage.getDiskReadBytes();
            lastDiskWrite = usage.getDiskWriteBytes();
            lastDiskCheck = nanoTime();
            diskUsage.add((int)(usage.getUsePercent()*100));
        }
        return String.format("%d%% %s", (Collections.max(diskUsage)), ioStat);
    } catch (SigarException e) {
        e.printStackTrace();
    }
    return "n/a";
}

三个变量

private long lastDiskCheck = 0;
private long lastDiskRead = 0;
private long lastDiskWrite = 0;

更新循环内我不想要的每个对象。如何让每个对象保持不同?

【问题讨论】:

  • 你可以创建一个类来保存你的对象和这 3 个值。
  • 你能举个例子吗

标签: java class oop object


【解决方案1】:
public class MyClass {
    private long lastDiskCheck;
    private long lastDiskRead;
    private long lastDiskWrite;

    private YourObject object;

    public void setLastDiskCheck(lastDiskCheck){ // setter of lastDiskCheck
        this.lastDiskCheck = lastDiskCheck;
    }

    public long getLastDiskCheck(){ //getter of lastDiskCheck
        return lastDiskCheck;
    }
}

使用这种方法,您可以将每个对象保留在 MyClass 中,并为每个对象保留不同的值。

【讨论】:

  • 我实际上对 java 很陌生。如果您能给我一些更详细的示例,我将非常感激。我很困惑如何与这个新班级互动。
  • 您将使用这个新类生成您的对象。您将设置每个值并使用它进行操作。
  • 你的意思是这个新班级的“与这个新班级”?你能给我一个二传手的例子吗?我真的很感激。
  • 我想我想太多了,我确实工作了,非常感谢您的时间:)
【解决方案2】:

嗯,在你的情况下。你应该学习 Java 中面向对象编程的 4 个支柱:http://learn2geek.com/4-pillars-oop-java/

之后,你就明白了如何创建不同的实例,如果你有编程知识,你不会有任何问题。

此外,澄清并回答您的问题。最好的解决方案是创建一个具有私有属性的类。您将使用 getters/setters 方法(公共修饰符)访问这些属性。实际上,您可以创建一些对象,并且可以使用 getter 和 setter 引入和接收每个对象的值。

简要说明:How do getters and setters work?

【讨论】:

  • 我不清楚的困惑是,如果我在一个新类中声明这些属性,它将是该类的属性和该类的对象。我设置了一个带有 setter 和 getter 的新类 DiskMembers。但我仍然不知道如何与这个新班级互动。
  • 示例:DiskMembers arrayTest[] = new DiskMembers[3]; arrayTest[0].setName("查理"); arrayTest[1].setName("罗伯特"); arrayTest[2].setName("马里奥");现在,每次调用 getName 时,都会收到不同对象的不同名称。你了解我吗?前面的“代码”,是一个带有随机设置器的随机示例。
  • 是的,我愿意。这很有帮助:),谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-12-15
  • 2014-06-04
  • 1970-01-01
  • 2022-12-04
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
相关资源
最近更新 更多