java - 通用整数类型到字符类型的转换

标签 java arrays generics casting

我的问题是关于转换通用 Java 类型的主题。假设我们有一个像这样的 Integer ArrayList:

List<Integer> intFileContents = new ArrayList<Integer>(8192);

现在,我想从列表中检索一个 Integer,然后将其作为字符打印出来,因为 ArrayList 实际上是从文本文件中读取字符:

while ((fileBuffer = stream.read())!= -1) {
    intFileContents.add(fileBuffer);
    System.out.print(fileBuffer);
}

如果我使用原始类型,我会像这样转换它:

char someChar = (char)someInt;

但是,转换泛型类型 (Character)intFileContents.get(pos); 是不可能的,因为它们是对象。现在,Integer 类中有一个方法:Integer.toString(),它应该以字符串形式返回所述 Integer。不幸的是,它所做的只是,如果我们如果 Integer = 255,则 String 将为“255”。这不是我想要的,因为将原始 int 转换为 char 会给出正确的 ASCII 代码字符,所以 f.e.强制转换 (char)65 将返回 someChar = 'A'。这正是我想要得到的,除了泛型类型。有什么方法可以达到这个目的?

最佳答案

这里有几个选项。您可以做的一件事是获取整数值,然后转换/打印该值:

(char) intFileContents.get(pos).intValue(); // Do something with this

可能更好的选择是立即转换您读入的 int 值,如下所示:

List<Character> charFileContents = new ArrayList<Character>(8192);

while ((fileBuffer = stream.read())!= -1) {
    charFileContents.add((char) fileBuffer); // <-- Do the cast before storing the value
    System.out.print(fileBuffer);
}

然后,当你去打印该字符时,它已经是正确的类型了。请注意,这仅适用于一种特定的编码(不记得是哪种),因此如果您想要另一种编码,则必须使用 InputStreamReader 而不是普通的 InputStream >

关于java - 通用整数类型到字符类型的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23617235/

相关文章:

java - 我应该在Java中移位以除以2吗?

generics - 在 kotlin 的 lambda 中使用多种泛型类型

Java 泛型和设计模式 : not parameterizing a reference to a generic type is always a bad thing?

java - 未经检查的泛型类类型转换?

java - 从类中读取变量

java - apache cxf LoggingFeature 屏蔽敏感信息

java - assertEquals(obj,obj) 返回失败的测试

python - 在不使用列表理解的情况下更改已过滤的二维数组中的元素,同时保留对原始数组的引用

javascript - 即使使用 if 语句也获取未定义的值

javascript - 如何检查数据是否被推送到 JSON 中