在Java中转换浮点int
我是Java新手,不知道如何将给定变量转换为int。我已经完成了以下工作:在Java中转换浮点int,java,class,Java,Class,我是Java新手,不知道如何将给定变量转换为int。我已经完成了以下工作: public class Ulamek<T> { private T licznik; private T mianownik; public Ulamek(T licznik, T mianownik) { this.licznik = licznik; this.mianownik = mianownik; } 公共类Ulamek{ 列克
public class Ulamek<T> {
private T licznik;
private T mianownik;
public Ulamek(T licznik, T mianownik) {
this.licznik = licznik;
this.mianownik = mianownik;
}
公共类Ulamek{
列克兹尼克;
私人T mianownik;
公共乌拉梅克(利兹尼克、米亚诺尼克){
this.licznik=licznik;
this.mianownik=mianownik;
}
我希望变量licznik
和mianownik
始终是int
的类型,即使我创建了一个带有float或double的对象Ulamek
。是否有方法转换它们或其他方法?
我必须使用
公共类Ulamek中的
来实现这一点,这里有一种可能的方法
public static <T> int value(T v) {
int k;
if (v instanceof Double) {
k = ((Double)v).intValue();
return k;
}
return -1; // error, only valid for positive values of v.
}
您可以使该类成为非泛型类,并使用方法重载来支持使用不同类型实例化该类
范例
public class Ulamek {
private int licznik;
private int mianownik;
public Ulamek(int licznik, int mianownik) {
this.licznik = licznik;
this.mianownik = mianownik;
}
public Ulamek(double licznik, double mianownik) {
this.licznik = (int)licznik;
this.mianownik = (int)mianownik;
}
}
看起来您的目标是创建一个方法(在本例中,它是一个构造函数,但原则适用于一般的方法),该方法接受任何类型的数字,然后将这些数字转换为整数值并存储
如果:
- 您希望允许任何数字类型并避免方法重载
- 您接受数字可能被截断、舍入甚至溢出为负值(例如,当您提供的
long
值大于Integer.MAX\u值时)
- 并且您希望避免在调用构造函数时必须执行类型转换(因此在特定情况下,
int
s作为参数可能不是一个选项)
您可以使用一个利用Java的实现,并且这些装箱的数字类型都扩展了:Number
公共类Ulamek{
里兹尼克私人酒店;
米亚诺尼克私人酒店;
公共乌拉梅克(数字利兹尼克,数字米亚努尼克){
this.licznik=对象
.requirennull(licznik,“licznik不能为null”)
.intValue();
this.mianownik=对象
.requireNonNull(mianownik,“mianownik不能为空”)
.intValue();
}
}
不需要泛型类型参数
请注意,我在那里添加了一个显式的requirennoull
。您没有指定如何处理null
值,而且您的目标数据类型(int
)没有null
的表示形式。因此,可以安全地假设null
在这里是不可接受的
现在你可以写:
var a=new-Ulamek(42,43);//int
var b=new-Ulamek(42.0,43.0);//double
var c=新乌拉梅克(42l,43l);//长
var d=新的Ulamek(新的BigDecimal(42.0),新的BigDecimal(43.0));
使用这种方法,如果您需要,在分配整数值之前添加范围检查可能会更具挑战性。然后将它们声明为int
类型,而不是T
。如果我将它们声明为int,构造函数会说它需要int类型,但它必须与T一起,因为我希望能够给定float或double,那么您希望/期望如何将某种类型的T
转换为int
?如果是String
,您会这样做。但是Java是否知道只给定T
?只要您的角色加倍,您就可以摆脱基于int
的构造函数,因为双构造函数将处理int、float和d加倍。可能从纯技术角度来看,但是如果一个具有int成员的类没有一个接受int参数的构造函数,这将令人困惑。此外,我想演示在支持其他类型的情况下如何使用方法重载。
public class Ulamek {
private int licznik;
private int mianownik;
public Ulamek(int licznik, int mianownik) {
this.licznik = licznik;
this.mianownik = mianownik;
}
public Ulamek(double licznik, double mianownik) {
this.licznik = (int)licznik;
this.mianownik = (int)mianownik;
}
}