【问题标题】:Why not everything is static function in java? Any differences in following two examples? [duplicate]为什么不是所有东西都是java中的静态函数?以下两个例子有什么不同吗? [复制]
【发布时间】:2015-11-24 19:44:16
【问题描述】:

假设你有以下两个类,第一个是 Cuboid 类,第二个是描述操作的类。

public class Cuboid {
    private double length;
    private double width;
    private double height;

    public Cuboid(double length, double width, double height) {
        super();
        this.length = length;
        this.width = width;
        this.height = height;
    }

    public double getVolume() {
        return length * width * height;
    }

    public double getSurfaceArea() {
        return 2 * (length * width + length * height + width * height);
    }
}

为什么不直接使用抽象类:

public class Cuboid {
    public static double getVolume(double length, double width, double height) {
        return length * width * height;
    }

    public static double getSurfaceArea(double length, double width, double height) {
        return 2 * (length * width + length * height + width * height);
    }
}

所以如果你想得到一个盒子的体积,只需使用以下代码:

double boxVolume = Cuboid.getVolume(2.0, 1.0,3.0);

那么下面的示例如何使用 AWS JAVA SDK?

public class CreateVolumeBuilder {
    private AmazonEC2 ec2;
    private int size;
    private String availabilityZone;

    public CreateVolumeBuilder(AmazonEC2 ec2, int size, String availabilityZone) {
        super();
        this.ec2 = ec2;
        this.size = size;
        this.availabilityZone = availabilityZone;
    }

    public static CreateVolumeResult getVolume() {
        CreateVolumeResult createVolumeResult = ec2
                .createVolume(new CreateVolumeRequest().withAvailabilityZone(availabilityZone).withSize(size));
        return createVolumeResult;
    }
}

VS

public class CreateVolumeBuilder {
    public static CreateVolumeResult getVolume(AmazonEC2 ec2, int size, String availabilityZone) {
        CreateVolumeResult createVolumeResult= ec2.createVolume(new CreateVolumeRequest().withAvailabilityZone(availabilityZone).withSize(size));
        return createVolumeResult;
    }
}

【问题讨论】:

  • 你可以使用静态,这完全取决于设计
  • 当然,但是如果你想比较两个 Cuboids 怎么办?

标签: java class


【解决方案1】:

您的问题简化为“当您可以编写程序时为什么要进行面向对象编程?”

OOP vs Functional Programming vs Procedural

除此之外,您现在需要在某个地方存储您的 Cuboid 数据。还是创建一个Cuboid 对象吧?

【讨论】:

  • 所以如果我想保存长方体数据,那么我肯定需要方法1;如果我不需要保存数据(如 CreateVolumeBuilder 类),那么我需要静态函数吗?
猜你喜欢
  • 2012-04-09
  • 2018-01-08
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 2020-01-31
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多