封装所有基元的Java对象 - 在OutputStreams中很有用

时间:2013-02-22 22:48:48

标签: java class standards abstract-class primitive

我有一个接收二进制数据的程序,根据其标题,代表floatintdoublecharstring等等。

在程序中,我使用ByteBuffer类来获取byte[],然后使用getFloat()getInt()等方法将内容提取到可用的内容中形式。

我希望有效地将getFloat()getInt()的值传递给System.out.println(),而不使用switch或if / else语句来实现所有可能性。

由于println()可以接受FloatInt或其他任何东西,如果有一个我可以使用的Java对象可以填充getXXX()数据会很好into,无论类型如何,然后将值返回到println()函数。

唯一的问题是,我不知道任何Java类这样做,我的Google搜索是干的。有人知道班级吗?

我想我可以写一个,但我会先尝试用Java认证的方式。

编辑:以下是我当前代码的示例:

ByteBuffer buffer = ByteBuffer.wrap(dat.message);

if (dat.dataType.equalsIgnoreCase("float")) {

    System.out.println("Message: " + buffer.getFloat());

} else if (dat.dataType.equalsIgnoreCase("int")) {

    System.out.println("Message: " + buffer.getInt());

} else if (dat.dataType.equalsIgnoreCase("char")) {

    System.out.println("Message: " + buffer.getChar());

} else if (dat.dataType.equalsIgnoreCase("long")) {

    System.out.println("Message: " + buffer.getLong());

} else if (dat.dataType.equalsIgnoreCase("boolean")) {

    System.out.println("Message: " + buffer.get());

} else if (dat.dataType.equalsIgnoreCase("string")) {

    String str = new String(dat.message);
    System.out.println("Message: " + str);

}

对我来说太丑了,Java必须有更好的方法。

2 个答案:

答案 0 :(得分:4)

public Object getValue(Dat dat) {
    ByteBuffer buffer = ByteBuffer.wrap(dat.message);

    if (dat.dataType.equalsIgnoreCase("float")) {
        return buffer.getFloat();
    } else if (dat.dataType.equalsIgnoreCase("int")) {
        return buffer.getInt();
    } else if (dat.dataType.equalsIgnoreCase("char")) {
        return buffer.getChar();
    } else if (dat.dataType.equalsIgnoreCase("long")) {
        return buffer.getLong();
    } else if (dat.dataType.equalsIgnoreCase("boolean")) {
        return buffer.get() != 0;
    } else if (dat.dataType.equalsIgnoreCase("string")) {
        return new String(dat.message);
    }
}

// ...

System.out.println("Message: " + getValue(dat));

float会自动装入FloatObjectint会自动装入Integer Object。{。} 等等。

答案 1 :(得分:1)

ByteBuffer buffer = ByteBuffer.wrap(dat.message);
System.out.println("Message: " + buffer);

Java中的所有对象都是从Object继承的某个类的实例。由于println接受Object,因此您无需担心传入的类型。


编辑:您能为dat提供声明吗?

相关问题