字符串歧义构造函数(byte [] vs char [])

这不是问题,但是我试图在这里理解基本的细微差别。

在构造new String(arg)argchar[]的String(使用byte[]时,我遇到了以下错误:
The constructor String(byte[]) is ambiguous
我检查了Java version 8的String实现,发现了两个构造函数:
public String(byte[] data) {
public String(char[] data) {

如果我传递了char[],为什么它与带有参数byte[]的构造函数匹配?
并且如果我传递了byte[],为什么它与带有参数char[]的构造函数匹配?
因为字节大小而匹配吗? (在两种情况下使用UTF-8编码可能都一样吗?)

编辑1: 这里讨论的arg是映射HashMap<Serializable,Serializable>()的一个值,该映射是根据从客户端收到的HttpServletRequest构建的。

编辑2:
我设法尽可能地重现了它。

此代码有效:

import java.io.Serializable;

public class StringTest {

    public static void main(String[] args) {
        StringTest t = new StringTest();
        System.out.println((String)(t.getParameter("Hello"))); 

    }

    @SuppressWarnings("unchecked")
    public <T extends Serializable> T getParameter(Serializable key) {
        return (T)new String("Hello");
    }
}

但这不是:

public class StringTest {

    public static void main(String[] args) {
        StringTest t = new StringTest();
        System.out.println(new String(t.getParameter("Hello")));        
    }

    @SuppressWarnings("unchecked")
    public <T extends Serializable> T getParameter(Serializable key) {
        return (T)new String("Hello");
    }
}

字符串歧义构造函数(byte [] vs char [])

cs_chenzz 回答:字符串歧义构造函数(byte [] vs char [])

您可以只创建一种验证Serializable类型的方法,然后强制转换实例以访问String的相关构造函数。

public String parse(Serializable s) {
    if (s instanceof char[]) {
        return new String((char[]) s);
    }
    if (s instanceof byte[]) {
        return new String((byte[]) s);
    }
    throw new IllegalArgumentException("Unknown type: " + s.getClass());
}
本文链接:https://www.f2er.com/3100871.html

大家都在问