9

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

4

3 回答 3

7

java中没有这样的类。

Java 中公认的做法是将原语相互转换。这是从一种类型转换为另一种类型的简单且一致的方法。

float bar = 4.0f;
int foo = (int) bar;
于 2012-12-21T16:54:23.613 回答
1

您可以轻松创建自己的 Convert 类

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));
  }
}
于 2017-05-12T12:43:41.670 回答
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;
    }
  }
}

注意:、、IntegerLong类都是 子类。FloatDoubleNumber

于 2021-08-04T12:54:45.473 回答