【问题标题】:How do you invoke an alternative static constructor in Java?如何在 Java 中调用替代的静态构造函数?
【发布时间】:2021-03-11 01:29:20
【问题描述】:

如何在 Java 中调用这些替代的静态构造函数?

我想使用 newFromLatLong 格式创建一个 Location 对象,但不知道如何

public class Location {

    public final double x;
    public final double y;

    public Location(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public static Location newFromPoint(Point point, Location origin,
            double scale) {
        return new Location(point.x / scale + origin.x, origin.y - point.y
                / scale);
    }

    
    public static Location newFromLatLon(double lat, double lon) {
        double y = (lat - CENTRE_LAT) * SCALE_LAT;
        double x = (lon - CENTRE_LON)
                * (SCALE_LAT * Math.cos((lat - CENTRE_LAT) * DEG_TO_RAD));
        return new Location(x, y);
    }

【问题讨论】:

  • 这些是类方法,您可以像调用任何其他类方法一样调用它们。
  • 我必须在现有位置上使用它们吗?为什么它们看起来像这样的构造函数?
  • 这些静态方法不是构造函数(构造函数是非静态的,没有返回类型)。这些方法创建新对象。它们可以被调用为Location location = Location.newFromLocation(lat, lon)
  • 顺便说一句,这个术语是静态构建器方法

标签: java constructor static


【解决方案1】:

您有创建对象的静态方法,因此您在类本身上调用它们,这将返回一个Location 对象。您可以将其用于进一步的用途。

Location location = Location.newFromLatLon(1.1, 1.2);

【讨论】:

    【解决方案2】:

    考虑使用构建器模式来创建您的 Location 对象。为避免重复代码,建议使用 Lombok @Builder 注解:

    https://projectlombok.org/features/Builder

    另外,考虑您使用相同的 Location 对象作为 newFromPoint 方法的参数:

    
    public static Location newFromPoint(Point point, Location origin,
                double scale) {
            return new Location(point.x / scale + origin.x, origin.y - point.y
                    / scale);
    }
    

    也许您需要查看您的域定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2011-05-08
      • 2013-05-26
      相关资源
      最近更新 更多