小编use*_*357的帖子

好模式?<X extends Exception> ... method()抛出X.

一些背景,然后一些问题.

我最近才发现接口(或类)在其方法可能引发的(已检查)异常类型中可能是通用的.例如:

interface GenericRunnable<X extends Exception> {
    void run() throws X;
}
Run Code Online (Sandbox Code Playgroud)

关键是如果您稍后使用,例如IOException并调用该run方法来实例化它,则编译器知道您需要捕获IOException或将其标记为抛出.更好的是,如果X是a RuntimeException,你根本不需要处理它.

这是一个使用上述界面的人为例子,但它基本上是一个回调,应该很常见.

public <X extends Exception> void runTwice(GenericRunnable<X> runnable) throws X {
    runnable.run(); runnable.run();
}
...
public myMethod() throws MyException {
    runTwice(myRunnable);
}
Run Code Online (Sandbox Code Playgroud)

我们正在调用一个通用的实用程序方法runTwice(可能在外部库中定义)来运行我们自己的特定方法并使用特定的检查异常,并且我们不会丢失任何有关可能抛出哪个特定的已检查异常的信息.

另一种方法将是简单地使用throws Exception双方的Runnable.run方法和runTwice方法.这不会限制Runnable接口的任何实现,但是检查异常的优点将会丢失.或者根本就没有throws,也失去了检查异常的优势,并可能迫使实现包装.

因为我从未见过throws X,也许我错过了什么.此外,我已经看到回调示例多次用作针对已检查异常的参数,而不会被反驳.(这个问题对检查异常的优缺点不感兴趣.)

throws X通常一个好主意?优缺点都有什么?你能给出一些使用throws X或不使用但应该具有的例子吗?

基本上,我想进一步了解一下.您可以评论以下示例.

  • OutputStream抛出IOException(也许ByteArrayOutputStream可以延伸GenericOutputStream<RuntimeException>) …

java generics exception throws checked-exceptions

13
推荐指数
1
解决办法
475
查看次数

如何设置 HTML5 画布大小以匹配设备像素中的显示大小

是否可以在 HTML5 画布中设置位图的大小,使其与设备像素中的显示大小(即用于显示画布的物理像素数,即使不是window.devicePixelRatio整数)完全匹配?

webglfundamentals上有关于如何调整画布大小的很好的描述,但它不能正确处理非整数devicePixelRatio。到目前为止我的理解:

  • 画布的显示大小在 CSS 中设置,例如canvas {width: 200px;}.
  • <canvas width="100"/>底层位图大小例如在HTML 或JS 中设置canvas.width = 100
  • 位图将被拉伸以适应 CSS 大小(如何受object-fit和 的影响object-position)。
  • 我们可以将位图大小设置为等于涉及 的某些表达式canvas.clientWidth
  • canvas.clientWidth是一个整数,单位是CSS像素,是计算出的内容宽度(加上填充)。我不知道浏览器是否真的将内容绘制为整数个 CSS 像素或整数个设备像素。

所以 webglfundamentals 建议类似

canvas.width = Math.floor(canvas.clientWidth * window.devicePixelRatio);
Run Code Online (Sandbox Code Playgroud)

但如果window.devicePixelRatio是一个分数,这有时不起作用(在整数坐标上绘制的 2 像素宽的线是模糊的)。我的 1920x1080 屏幕devicePixelRatio默认值为 1.5,页面缩放会影响此值,因此有很多原因通常devicePixelRatio不是整数。我们可以做什么?

html javascript css pixel html5-canvas

6
推荐指数
2
解决办法
3217
查看次数