gpt4 book ai didi

Java 类型删除和重载?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:30 25 4
gpt4 key购买 nike

谁能简单解释一下为什么在下面的类中,当我传入一个String、Integer或UUID时,只使用以Object为参数的方法重载?

public final class SkuHydratingConverter implements Converter<Object, Sku> {
@Autowired
private SkuService skuService;


/**
* Default implementation, that errs as we don't know how to convert from
* the source type.
*/
public Sku convert(Object source) throws IllegalArgumentException {
throw new IllegalArgumentException("Could not convert to Sku");
}


public Sku convert(String source) throws IllegalArgumentException {
return convert(Integer.valueOf(source));
}


public Sku convert(Integer source) throws IllegalArgumentException {
return skuService.get(source);
}


public Sku convert(UUID source) throws IllegalArgumentException {
return skuService.get(source);
}
}

最初我想实现 Converter<?, ?>一节课三次,但我很快发现这是不可能的。

最佳答案

重载机制在编译时起作用,即调用哪个方法是在编译类时决定的,而不是在运行程序时决定的。

由于(通常)在编译时无法知道运行时类型,所以像这样的片段

Object o = "some string";
method(o);

将导致调用方法,该方法将Object 作为参数,因为Objectcompile-time typeo 的。

(这与类型删除或泛型无关。)

关于Java 类型删除和重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7511930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com