小编Mor*_*tch的帖子

为什么Java方法参数可以显式协变?

在Java中,您可以使用extends关键字声明给定的类型参数是协变的.协方差和逆变确实让我感到困惑,但我想我已经对它们有了一般的认识.但是,在我的测试中,似乎Java类型参数本质上是协变的.那么我们为什么要明确说明呢?

例如,我构建了一个如下所示的快速示例:

public class Main<E> {

    protected E value;

    public Main(E value) {
        this.value = value;
    }

    public <T extends E> void setValue(T value) {
        this.value = value;
    }

    public E getValue() {
        return value;
    }

    public static void main(String[] args) {
        Main<Number> example = new Main<Number>(0L);
        System.out.println(example.getValue().getClass().getCanonicalName());
        example.setValue(32.0);
        System.out.println(example.getValue().getClass().getCanonicalName());
    }
}
Run Code Online (Sandbox Code Playgroud)

使用的类型是Number,所有盒装类型的超类.在构造函数中,它接受一个声明为E类型的参数(在本例中为Number).setValue另一方面,在该方法中,它采用一个声明为任何扩展类型E 的参数.两个println调用都返回正确的值(首先java.lang.Long,然后java.lang.Double).

我看到它的方式,删除泛型,你仍然可以传递子类.如果声明的类没有类型参数,并且方法/构造函数接受/返回Numbers,它仍然可以正常工作.

那么extends在这种情况下关键字的目的是什么?

java generics covariance

3
推荐指数
1
解决办法
89
查看次数

C++数学库的三角函数的结果不正确

我目前正在做一个我已经做了近一年的个人项目.我正在尝试将其移植到Windows环境中,该环境已成功完成.因为我试图尽快将Windows版本发布给人们,所以我决定继续在Windows中开发,同时尝试添加新功能并获取已存在数月的错误.虽然最近尝试添加严重依赖于三角函数的功能,但我发现无论我传递的参数如何,奇怪的是,所有3个三角函数都返回相同的值(1072693887).可以想象,这导致了系统中一些相当奇怪的错误.

我有math.h包含,据我所知,没有其他文件包含此功能.(也许有一个调试器命令来查找符号定义的位置?我找不到任何这样的东西,但也许我错过了一些东西.)我试过去别的地方搜索并在Google上搜索,但无济于事......

有没有其他人之前听说过这个问题,或者知道如何修复它?

c++ trigonometry cmath

0
推荐指数
1
解决办法
2219
查看次数

在检索证书之前,InstallCert.java会崩溃服务器

我有一个在Dropwizard上运行的服务器(即为其Web服务器运行Jetty).我正在尝试为它设置SSL.

我有一个由CA签署的证书(特别是Comodo,通过Namecheap).我安装了根证书和中间证书,然后安装了我自己的证书(使用Comodo支持的说明.但是,当我第一次尝试连接到我的服务器时(它启动正常),我收到一个错误:( sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target当然堆栈跟踪更长,但这是根本原因.)

我已经尝试过搜索这个错误,并且一直有人说这应该只发生在自签名证书上,而我的证书不是.尽管如此,我尝试下载InstallCert.java程序,该程序似乎源自Sun博客上的一篇(现已删除)文章.具体来说,我从这个页面获得了学位.

在几次(失败的)尝试通过命令行使其工作(这是另一次的讨论)后,我最终让它运行正常.现在我从程序得到的输出是:

Loading KeyStore C:\Program Files\Java\jdk1.8.0_05\jre\lib\security\cacerts...
Opening connection to localhost:8443...
Starting SSL handshake...
Exception in thread "main" java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
    at sun.security.ssl.InputRecord.read(InputRecord.java:503)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
    at com.aw.ad.util.InstallCert.main(InstallCert.java:98)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

同时,如果我用我的网站打开窗口,它会再次传递unable to find …

ssl ssl-certificate dropwizard

0
推荐指数
1
解决办法
1425
查看次数