Java 方法是如何被常量调用的?

Java 方法是如何被常量调用的?,java,Java,我正在设计一个程序来转换单位之间的距离,并且已经得到了测试代码。我不知道如何编写我的方法,以便它可以被常量调用。给出了以下代码: System.out.println(DistanceUnit.METER.toMetric(100)); System.out.println(DistanceUnit.METER.fromMetric(100)); System.out.println(DistanceUnit.FOOT.toMetric(100)); System.out.print

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

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中的常量调用它们

请记住:类上存在方法。是的,您也可以在接口上定义方法——但关键是:您只能在对象上调用方法,或者在类是静态的情况下调用方法

从这个意义上说,你必须首先计算出常数的类型。换句话说:你首先要理解常量只是指某个对象,它有一个特定的名字

从这里开始:您已经以某种方式定义了名为CONSTANT的对象的类型。当您想在该类型的对象上调用方法时,必须将它们添加到该类型

换言之,假设您有以下情况:

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

class Foo {
  public static String fromMetric(int value);
比如说


请注意:DistanceUnit.METER是指类中的静态字段还是指枚举并不重要——您的todo是相同的:METER表示的类型需要相应的方法。如果您不理解这些概念之间的区别,请开始阅读枚举和静态字段。

请记住:类中存在方法。是的,您也可以在接口上定义方法——但关键是:您只能在对象上调用方法,或者在类是静态的情况下调用方法

从这个意义上说,你必须首先计算出常数的类型。换句话说:你首先要理解常量只是指某个对象,它有一个特定的名字

从这里开始:您已经以某种方式定义了名为CONSTANT的对象的类型。当您想在该类型的对象上调用方法时,必须将它们添加到该类型

换言之,假设您有以下情况:

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

class Foo {
  public static String fromMetric(int value);
比如说


请注意:DistanceUnit.METER是指类中的静态字段还是指枚举并不重要——您的todo是相同的:METER表示的类型需要相应的方法。如果您不理解这些概念之间的区别,请开始阅读枚举和静态字段。

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

下面是使用接口和具体实现的米和英尺实现示例:

    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;
        }        
    }

用enum替换DistanceUnit是一种更好的方法,但我把它留给您作为练习。

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

下面是使用接口和具体实现的米和英尺实现示例:

    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;
        }        
    }

用enum替换DistanceUnit是一种更好的方法,但我把它留给您作为练习。

一个enum就足够了。Java枚举常量是对象。您可以对它们调用方法

标准样式是将枚举常量大写

你只需要写一次toMetric和fromMetric


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

标准样式是将枚举常量大写

你只需要写一次toMetric和fromMetric


这看起来像一个枚举,而不是常量。欢迎使用堆栈溢出!请仔细阅读,环顾四周,仔细阅读,特别是作业通常不是随意的;您的讲师、教程或课程将涵盖必要的主题,使您能够做到这一点。复习你的课程材料、课堂笔记等,并试着做这项工作。如果你遇到了一个特定的问题,彻底地研究它,如果你仍然困在那里,就发布你的代码和问题的描述。人们会很乐意提供帮助的。可能是enum,可能只是非enum类的实例。尝试找出METER.fromMetric和METER.toMetric可以做什么…是的,我明白了。但是任务明确指出,我要创建一个名为DiatanceUnit的类,它应该包含一个构造函数DistanceUnitdouble Meters PerUnit和常量PLANCK、METER、FOOT和PARSEC,并且已经给了一个表,其中包含用于它们的值这看起来像一个枚举,而不是常量。欢迎使用堆栈溢出!请拿着这个,环顾四周,通读一遍,尤其是屁股
签名通常不是武断的;您的讲师、教程或课程将涵盖必要的主题,使您能够做到这一点。复习你的课程材料、课堂笔记等,并试着做这项工作。如果你遇到了一个特定的问题,彻底地研究它,如果你仍然困在那里,就发布你的代码和问题的描述。人们会很乐意提供帮助的。可能是enum,可能只是非enum类的实例。尝试找出METER.fromMetric和METER.toMetric可以做什么…是的,我明白了。但该赋值明确指出,我要创建一个名为DiatanceUnit的类,它应该包含一个构造函数DistanceUnitdouble Meters PerUnit和常量PLANCK、METER、FOOT和PARSEC,并且已经给出了一个表,其中的值用于公共静态final double METER=1;公共静态最终双足=0.3048;公共静态最终双解析c=3.08567758*Math.pow10,16;公共静态最终双普朗克=1.616229*Math.pow10,-35;这是我对DistanceUnit类中常量的声明。我可能有点离题了,但你是说原语类型double必须有方法吗?你能读懂你放在这个注释中的代码吗?真正地请相应地加强您的问题,而不是在这样的评论中提供更多信息!我想说的是:仪表的类型必须是一种可以添加方法的类型。因为你拥有那种类型!因此,这里不能使用double。你需要的所有信息都已经写在我的答案里了!不,像double这样的原语没有可以调用的方法。但是,您也可以将类定义为常量,而不仅仅是原语。常量一词通常只指静态和最终的事物。@Zabuza-在Java中,不能使用静态和最终限定符将对象标记为常量。它们只影响对对象的引用。@andythonas是的,我当然是这个意思。但如果有人不知道,谢谢你澄清。公共静态最终双米=1;公共静态最终双足=0.3048;公共静态最终双解析c=3.08567758*Math.pow10,16;公共静态最终双普朗克=1.616229*Math.pow10,-35;这是我对DistanceUnit类中常量的声明。我可能有点离题了,但你是说原语类型double必须有方法吗?你能读懂你放在这个注释中的代码吗?真正地请相应地加强您的问题,而不是在这样的评论中提供更多信息!我想说的是:仪表的类型必须是一种可以添加方法的类型。因为你拥有那种类型!因此,这里不能使用double。你需要的所有信息都已经写在我的答案里了!不,像double这样的原语没有可以调用的方法。但是,您也可以将类定义为常量,而不仅仅是原语。常量一词通常只指静态和最终的事物。@Zabuza-在Java中,不能使用静态和最终限定符将对象标记为常量。它们只影响对对象的引用。@andythonas是的,我当然是这个意思。不过,如果有人不知道,谢谢你澄清。我太懒了,在手机上输入更多的代码。我投票支持你添加更多细节!谢谢当我看到@Niklas Westerberg对你的答案发表评论时,我决定添加我的答案。我太懒了,在手机上输入了更多的代码。我投票支持你添加更多细节!谢谢当我看到@Niklas Westerberg对你的答案发表评论时,我决定添加我的答案。