我对实例及其实现有一些非常严重的困惑。
let finalizeButton = UIButton()
finalizeButton.cornerRadius = 5
finalizeButton.setTitleColor(.white, for: .normal)
finalizeButton.setTitleColor(UIColor.white.darkerColor(percent: 0.2), for: .highlighted)
finalizeButton.backgroundColor = .black
finalizeButton.addTarget(self, action: #selector(finalize(_:)), for: .touchUpInside)
finalizeButton.setTitle("Buy Now", for: .normal)
finalizeButton.titleLabel?.font = UIFont.systemFont(ofSize: 22, weight: UIFontWeightRegular)
bottomSection.addSubview(finalizeButton)
constrain(finalizeButton) {
$0.width == $0.superview!.width * CGFloat(0.8)
$0.height == CGFloat(54)
$0.bottom == $0.superview!.bottom - CGFloat(16)
$0.centerX == $0.superview!.centerX
}
self.finalizeButton = finalizeButton
上面的代码是有效的,因为我知道List<String> lines = Files.readAllLines(Paths.get(fileAddress),
Charset.defaultCharset());
是一个接口,但我可以使用它的类型作为参考变量,我也知道RHS实际上返回List<String>
是ArrayList
的实现。另外,List
会返回lines.getClass().getName()
以确定。
但令人惊讶的是,当我这样做时,
java.util.ArrayList
我收到了错误,
ArrayList<String> lines = Files.readAllLines(Paths.get(fileAddress),
Charset.defaultCharset());
这怎么可能?
答案 0 :(得分:0)
Java编译器“不知道”将从该方法返回哪种类型。
java.util.list
是interface,并且列表中包含所有已知的列表接口实现。
这是readAllLines
方法的签名
public static List<String> readAllLines(Path path, Charset cs) throws IOException
Files.readAllLines的文档。
编译器只有readAllLines
方法将返回List<String>
的信息,但它没有任何信息实现它的信息。因为它编译器无法编译代码。