在C#中,我喜欢使用Convert类。它使得从一种类型转换为另一种类型变得容易和一致。我在考虑用Java编写类似的类,但我不想重新发明轮子。所以我用Google搜索,看看是否存在这样的事情并且没有取得好成绩。那么有人在标准库,google guava或apache commons中都知道这样的事情吗?
答案 0 :(得分:7)
在java中没有这样的类。
java中公认的做法是将基元相互转换。这是一种从一种类型转换为另一种类型的简单而一致的方式。
float bar = 4.0f;
int foo = (int) bar;
答案 1 :(得分:0)
您可以轻松创建自己的转换类
package com.abc;
public class Convert {
public static int ToInt(Object obj) {
try{
return Integer.parseInt(obj.toString());
}
catch(Exception ex){
return 0;
}
}
public static float ToFloat(Object obj) {
try{
return Float.parseFloat(obj.toString());
}
catch(Exception ex){
return 0f;
}
}
public static boolean ToBoolean(Object obj){
try{
if(obj.getClass() == Boolean.class)
return (Boolean)obj;
return Boolean.parseBoolean(obj.toString());
}
catch(Exception ex){
return false;
}
}
}
上述课程通过以下单元测试:
package com.abc;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class ConvertTest {
@Test
public void ConvertToInt() {
assertEquals(1, Convert.ToInt(1));
assertEquals(0, Convert.ToInt("Suresh"));
assertEquals(0, Convert.ToInt(null));
assertEquals(0, Convert.ToInt(true));
assertEquals(0, Convert.ToInt(3.3f));
}
@SuppressWarnings("deprecation")
@Test
public void ConvertToFloat() {
assertEquals(1f, Convert.ToFloat(1), 0.001f);
assertEquals(0f, Convert.ToFloat("Suresh"), 0.001f);
assertEquals(0f, Convert.ToFloat(null), 0.001f);
assertEquals(0f, Convert.ToFloat(true), 0.001f);
assertEquals(3.3f, Convert.ToFloat(3.3f), 0.001f);
}
@Test
public void ConvertToBoolean() {
assertEquals(false, Convert.ToBoolean(1));
assertEquals(false, Convert.ToBoolean("Suresh"));
assertEquals(false, Convert.ToBoolean(null));
assertEquals(true, Convert.ToBoolean(true));
assertEquals(false, Convert.ToBoolean(false));
assertEquals(false, Convert.ToBoolean(3.3f));
}
}
答案 2 :(得分:0)
建立在 Suresh Prajapati 的回答之上,将所有数字转换为字符串,然后再次将它们解析回数字似乎有点低效。我建议如下:
public class Convert {
public static int ToInt(Object obj) {
if (obj instanceof Number) {
return ((Number)obj).intValue();
}
if (obj instanceof Boolean) {
return ((Boolean)obj).booleanValue() ? 1 : 0;
}
try {
return Integer.parseInt(obj.toString());
}
catch (Exception ex) {
return 0;
}
}
public static float ToFloat(Object obj) {
if (obj instanceof Number) {
return ((Number)obj).floatValue();
}
if (obj instanceof Boolean) {
return ((Boolean)obj).booleanValue() ? 1.0f : 0.0f;
}
try {
return Float.parseFloat(obj.toString());
}
catch (Exception ex) {
return 0f;
}
}
public static boolean ToBoolean(Object obj){
if (obj instanceof Boolean) {
return ((Boolean)obj).booleanValue();
}
if (obj instanceof Number) {
return (((Number)obj).longValue() != 0L);
}
try {
return Boolean.parseBoolean(obj.toString());
}
catch (Exception ex) {
return false;
}
}
}
注意: Integer
、Long
、Float
、Double
等类
all 是 Number
的子类。