【问题标题】:how to cast object to double type array in java?如何在java中将对象转换为双类型数组?
【发布时间】:2011-10-03 04:06:27
【问题描述】:

好的,如果我有这样的方法:

Object[] myTest(int[] a, double[] b){
   return new Object[]{a,b};
}

现在如何将结果对象转换为 int[] 和 double[]?

如果我使用:

int[] array1 = (int[]) myTest(a,b)[0];
double[] array2 = (double[]) myTest(a,b)[1];

但这不起作用。或者有什么有效的方法来完成这项工作?

【问题讨论】:

  • 这是非常糟糕的设计。你想做什么?
  • @Martel,对不起,我错了。 @SLaks,为什么你认为这是糟糕的设计??

标签: java arrays object hashmap


【解决方案1】:

你可以使用包装器:

Integer[] array = (Integer[]) myTest()

【讨论】:

    【解决方案2】:

    虽然你的代码对我来说运行良好,但你可以用另一种方式来做:

    public static Object myTest(int[] a, double[] b, int index)
    {
        Object[] obj = {a,b};
        return obj[index];
    }
    

    然后像这样使用它:

    int[] array1 = (int[]) myTest(a,b,0);
    double[] array2 = (double[]) myTest(a,b,1);
    

    【讨论】:

    • 是的,谢谢,我刚刚意识到它有效。我不知道我最初尝试过,但总是遇到这种类型的转换错误。
    【解决方案3】:

    不确定您遇到困难的原因:在 Java 6 上,这可以按预期工作。

    尝试编译这个类并运行它:

    public class t1
    {
        public static void main(String[] args) throws Exception
        {
        int[] a = new int[1];
        double[] b = new double[1];
    
        int[] array1 = (int[]) myTest(a,b)[0];
        double[] array2 = (double[]) myTest(a,b)[1];
        System.err.println(array1);
        System.err.println(array2);
        }
    
        static Object[] myTest(int[] a, double[] b){
        return new Object[]{a,b};
        }
    }
    

    它会打印出来

    [I@3e25a5
    [D@19821f
    

    这是正在发生的自动装箱,但仍然有效。

    【讨论】:

    • 你为什么用System.err.println()
    • 哈哈。更简单的击键(我可以用一根手指输入 err,因为 er 是并排的;out 涉及2 根手指)。
    • 谢谢,它确实有效。我不知道 Eclipse 有这个奇怪的问题,但现在它正在工作:)))
    【解决方案4】:

    有一个 WrapperObject 包含 int[] 和 double[] 。使用 getter 访问它们。

    public class WrapperObject {
    
         private int[] a;
         private double[] b;
    
         public void setA(int[] a1) {
             a = a1;
         }
    
         public int[] getA() {
             return a;
         }
        .....
    }
    

    让您的 myTest 方法返回该对象。

    public WrapperObject myTest(int[] a , double[] b) {
          return new WrapperObject(a, b);
    }
    

    【讨论】:

    • 感谢您提供详细信息。我刚刚意识到我的方法也有效。我不知道为什么一开始没有。
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2015-05-11
    • 2021-09-09
    • 2018-09-08
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多