我可以设置类class = 8

时间:2014-05-03 09:26:13

标签: java types

我为措辞严厉的标题道歉,但我无法找到更好的方式来描述我的问题。

我正在制作一个自定义的Degree类,只能保存0到360之间的任何数字,任何更高的加法将被解析为0-360当量。我想知道是否有可能做原始类型I.e Int a = 1。

我怀疑这是可能的,但如果是的话,我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

这就是您在Java中所描述的内容。您必须创建一个表示学位的包装类。但是,在内部,我们只使用Integer对象(或int原语可以正常工作。)

public class Degree {

    private Integer degrees;

    // Constructor, takes an Integer object or int primitive
    public Degree(Integer deg){
        setDegrees(deg);
    }
    // Get degrees from your wrapper object
    public Integer getDegrees(){
        return degrees;
    }
    // Set degress of your wrapper object
    public void setDegrees(Integer deg){
        if(deg<361 && deg>-1){ degrees = deg; }
        else if(deg>360){ degrees = 360; }
        else if(deg<0){ degrees = 0; }
    }
}

要在其他地方的代码中使用它,您只需使用;

Degree d = new Degree(31);

为了方便您使用新的equals();课程,您可能需要override the toString(); method以及Degree方法。我希望这会有所帮助。


编辑:声明类并使用=运算符将其声明为基元的行为称为自动装箱。自Java 5以来可能出现的行为,但仅适用于Java 5 specification中定义的预先设置的包装类列表。

该列表包括BooleanByteShortCharacterIntegerLongFloat,{{ 1}}。

答案 1 :(得分:1)

我决定在这里发布我已完成的课程,以防有人想要它作为参考。

public class Degree extends Number implements Comparable<Degree>{

    float degreeFloat;

    public Degree(){
        degreeFloat = 0;
    }

    public Degree(float degrees){
        this.set(degrees);
    }

    public Degree(int degrees){
        this.set(degrees);
    }

    public Degree(Degree degrees){
        this.set(degrees);
    }

    @Override
    public int intValue() {
        return (int)degreeFloat;
    }

    @Override
    public long longValue() {
        return (long)degreeFloat;
    }

    @Override
    public float floatValue() {
        return degreeFloat;
    }

    @Override
    public double doubleValue() {
        return (double)degreeFloat;
    }

    @Override
    public int compareTo(Degree compTo) {
        if(compTo.get() > degreeFloat)
            return 1;
        else if(compTo.get() < degreeFloat)
            return -1;
        else
            return 0;
    }

    public Boolean equals(Degree compTo){
        if(degreeFloat == compTo.get()) return true;
        else return false;
    }

    public float get(){
        return degreeFloat;
    }

    public void set(Degree setTo){
        this.degreeFloat = setTo.get();
    }

    public void set(float setTo){
        this.degreeFloat = setNormalise(setTo);
    }

    public void set(int setTo){
        this.degreeFloat = setNormalise((float)setTo);
    }

    public void set(double setTo){
        this.degreeFloat = setNormalise((float)setTo);
    }

    public float setNormalise(float setTo){
        float value = setTo;

        while(setTo > 360f)
            setTo -= 360F;

        while(setTo < 0f)
            setTo += 360f;

        return value;
    }
}