如何通过常量调用方法?

时间:2018-02-08 19:22:55

标签: java

我正在设计一个用于转换单位之间距离的程序,并且已经给出了代码来测试它。我不明白如何编写我的方法,以便可以通过常量调用。提供以下代码:

System.out.println(DistanceUnit.METER.toMetric(100));
  System.out.println(DistanceUnit.METER.fromMetric(100));
  System.out.println(DistanceUnit.FOOT.toMetric(100));
  System.out.println(DistanceUnit.FOOT.fromMetric(100));
  System.out.println(DistanceUnit.PLANCK.toMetric(100));
  System.out.println(DistanceUnit.PLANCK.fromMetric(100));;
  System.out.println(DistanceUnit.PARSEC.toMetric(100));
  System.out.println(DistanceUnit.PARSEC.fromMetric(100));

所以我根据赋值中的指令定义了上面的常量,但是如何创建fromMetric和toMetric方法,以便它们可以被DistanceUnits中的常量调用?

3 个答案:

答案 0 :(得分:3)

请注意:上存在方法。是的,您也可以在接口上定义方法 - 但重点是:您只能在对象上或在类上(当它们是静态时)调用方法。

从这个意义上说,你必须首先计算你的CONSTANT的类型。换句话说:你首先必须要理解" CONSTANT"简单地指一些具有特定名称的对象。

从那里开始:你已经以某种方式定义了名为CONSTANT的对象的类型。如果要在该类型的对象上调用方法,则必须添加到该类型。

换句话说,假设你有类似的东西:

class DistanceUnit {
  public final static Foo METER = new Foo(...);

你需要

class Foo {
  public static String fromMetric(int value);
例如,

仅仅是为了记录:MatchUnit.METER是指一个类中的静态字段,还是一个枚举并不重要 - 你的待办事项是相同的:< METER表示的em> type 需要相应的方法。如果您不理解这些概念之间的差异,请开始阅读枚举的here和静态字段的there

答案 1 :(得分:2)

@GhostCat中的注释和答案应该是实现这些常量所需的全部内容,但我觉得你仍然在考虑基元/字符串而不是对象的常量。在java常量中也可以引用任何对象。

以下是使用接口和具体实现的METER和FOOT实现的示例:

    public class DistanceUnit{
        public static final Converter METER = new MeterConverter();
        public static final Converter FOOT = new FootConverter();
    }


    public interface Converter{

        public double fromMetric(double d);

        public double toMetric(double d);       
    }

    public class MeterConverter implements Converter{

        @Override
        public double fromMetric(double d) {
            return d;
        }

        @Override
        public double toMetric(double d) {
            return d;
        }        
    }

    public class FootConverter implements Converter{

        @Override
        public double fromMetric(double meters) {
            return meters*3.28084;
        }

        @Override
        public double toMetric(double feet) {
            return feet*0.3048;
        }        
    }

有更好的方法可以通过将DistanceUnit替换为枚举来实现此目的,但我将其作为练习留给您。

答案 2 :(得分:0)

单个枚举就足够了。 Java枚举常量是对象。你可以调用它们的方法。

标准样式是使枚举常量大写。

您只需要写一次toMetric()fromMetric()

public enum DistanceUnit {
   METER( 1.0 ),
   FOOT( 0.3048 ),
   ...
   ;

   private m_distanceInMeters;

   DistanceUnit( double distanceInMeters ) {
     ...
   }

   public double fromMetric(double d) {
     ...
   }

   public double toMetric(double d) {
     ...
   }
}