在Java中是否有与C#相同的Convert类?

时间:2012-12-21 16:46:19

标签: java

在C#中,我喜欢使用Convert类。它使得从一种类型转换为另一种类型变得容易和一致。我在考虑用Java编写类似的类,但我不想重新发明轮子。所以我用Google搜索,看看是否存在这样的事情并且没有取得好成绩。那么有人在标准库,google guava或apache commons中都知道这样的事情吗?

3 个答案:

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

注意: IntegerLongFloatDouble 等类 allNumber 的子类。