我为措辞严厉的标题道歉,但我无法找到更好的方式来描述我的问题。
我正在制作一个自定义的Degree类,只能保存0到360之间的任何数字,任何更高的加法将被解析为0-360当量。我想知道是否有可能做原始类型I.e Int a = 1。
我怀疑这是可能的,但如果是的话,我该怎么做呢?
答案 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中定义的预先设置的包装类列表。
该列表包括Boolean
,Byte
,Short
,Character
,Integer
,Long
,Float
,{{ 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;
}
}