小编luc*_*svw的帖子

泛型和抽象方法

我遇到过一些我在Java中发现奇怪的东西并且无法找到有关它的更多信息.请考虑以下代码:

public class TestClass {

    private static abstract class AbstractClass {
        abstract List<? extends Object> getList();
        abstract Map<Long, List<? extends Object>> getMap();
    }

    private static final class ConcreteClass extends AbstractClass {
        @Override
        List<String> getList() { 
            return null;
        }

        @Override
        Map<Long, List<String>> getMap() {
            return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器在getMap()方法上显示错误:

getMap() in ConcreteClass cannot override getMap() in AbstractClass
  return type Map<Long, List<String>> is not compatible with Map<Long, List<? extends Object>>
Run Code Online (Sandbox Code Playgroud)

但是该getList()方法不存在相同的错误,但我希望两者都可以工作,或者两者都失败.在这两种情况下,最重要的方法都是List<String>代替List<? extends Object>.有人可以解释一下吗?

java generics

8
推荐指数
1
解决办法
171
查看次数

未调用Tomcat ServletContextListener.contextDestroyed

我们有多个MemoryLeaks(在catalina.out中找到),同时重新加载上下文.

为了清理这些线程,我创建了一个ServletContextListener的实现.

contextInitialized()创建上下文时成功调用该方法,因为我可以看到日志条目.

但是contextDestroyed()没有调用该方法,因此不会调用我的清理代码.任何想法为什么会这样?

我是否应该在需要重新加载上下文时实现另一个接口?

public class MyContextListener implements ServletContextListener {

    private static final Logger log = Logger.getLogger(MyContextListener.class);

    @Override
    public void contextDestroyed(final ServletContextEvent arg0) {
        MyContextListener.log.info("destroying Servlet Context");
        //Do stuff
        MyContextListener.log.info("Servlet Context destroyed");
    }

    @Override
    public void contextInitialized(final ServletContextEvent arg0) {
        try {
            MyContextListener.log.info("Creating Servlet Context");
            //Do stuff
        } finally {
            MyContextListener.log.info("Servlet Context created");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

tomcat servletcontextlistener

7
推荐指数
1
解决办法
7020
查看次数

WeldException:无法在null上调用destroy()

我一直在从事一个Maven项目,并且在闲置了几分钟(〜15分钟)后,Tomcat日志吐出了以下内容:

14:05:36.155 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] ERROR org.jboss.weld.Bean - WELD-000019: Error destroying an instance null of Managed Bean [class foo.Bar] with qualifiers [@Default @Any @Named]
14:05:36.155 [ContainerBackgroundProcessor[StandardEngine[Catalina]]] DEBUG org.jboss.weld.Bean - Catching
org.jboss.weld.exceptions.WeldException: WELD-000049: Unable to invoke public void foo.Bar.destroy() on null
    at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.invokeMethods(DefaultLifecycleCallbackInvoker.java:100) ~[weld-servlet-2.3.1.Final.jar:2.3.1.Final]
    at org.jboss.weld.injection.producer.DefaultLifecycleCallbackInvoker.preDestroy(DefaultLifecycleCallbackInvoker.java:91) ~[weld-servlet-2.3.1.Final.jar:2.3.1.Final]
    at org.jboss.weld.injection.producer.BasicInjectionTarget.preDestroy(BasicInjectionTarget.java:131) ~[weld-servlet-2.3.1.Final.jar:2.3.1.Final]
    at org.jboss.weld.bean.ManagedBean.destroy(ManagedBean.java:189) [weld-servlet-2.3.1.Final.jar:2.3.1.Final]
    at com.sun.faces.application.view.ViewScopeContextManager.destroyBeans(ViewScopeContextManager.java:177) [javax.faces-2.2.13.jar:2.2.13]
    at com.sun.faces.application.view.ViewScopeContextManager.sessionDestroyed(ViewScopeContextManager.java:339) [javax.faces-2.2.13.jar:2.2.13]
    at com.sun.faces.application.view.ViewScopeManager.sessionDestroyed(ViewScopeManager.java:369) [javax.faces-2.2.13.jar:2.2.13]
    at com.sun.faces.application.WebappLifecycleListener.sessionDestroyed(WebappLifecycleListener.java:199) [javax.faces-2.2.13.jar:2.2.13]
    at com.sun.faces.config.ConfigureListener.sessionDestroyed(ConfigureListener.java:407) [javax.faces-2.2.13.jar:2.2.13]
    at org.apache.catalina.session.StandardSession.expire(StandardSession.java:839) [catalina.jar:8.0.27]
    at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:697) [catalina.jar:8.0.27]
    at org.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:570) [catalina.jar:8.0.27]
    at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:555) [catalina.jar:8.0.27]
    at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5551) [catalina.jar:8.0.27] …
Run Code Online (Sandbox Code Playgroud)

java jboss maven

5
推荐指数
0
解决办法
349
查看次数

如何在 iText 中为 FormFields 设置行距?

iText 7 表单字段中的默认行距似乎是 2 或 1.5,但我真的很想删除行距。通常情况下,我组线通过调用间隔setMultipliedLeading(..)一个上Paragraph对象,但也PdfAcroForm也不的亚类中,PdfTextFormField有这样的方法,只有字符串可以被设置为表单字段值。如何设置行距的值?提前致谢。

pdf-generation itext7

5
推荐指数
1
解决办法
590
查看次数

为什么新的Date(未定义)创建了无效的日期,但新的Date(null)却没有?

今天我用Javascript发现了一些奇怪的事:

console.log(new Date(null)); // 1970-01-01T00:00:00.000Z
console.log(new Date(undefined)); // Invalid Date
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我知道null和undefined不一样,但在这种情况下我会期望相同的结果.

javascript

5
推荐指数
1
解决办法
686
查看次数

查找原因:“表单组件需要在其祖先中有一个 UIForm。”

有什么方法可以确定哪一行(甚至是什么文件)导致

表单组件需要在其祖先中有一个 UIForm。建议:将必要的组件包含在

来自 Primefaces 的警告信息?我刚刚开始处理一个已建立的项目,其中包含许多带有各种模板和继承的 .xhtml 文件(由其他人编写),但我无法确定导致问题的文件的范围。

我试过谷歌搜索但没有运气,我找不到关于如何找到错误来源的答案。

更新:它不像转到 url 中显示的页面那么简单。例如,当我导航到 时会显示警告'../foo.xhtml',但是,它foo.xhtml实现了一个模板并包含多个其他.xhtml文件(每个文件又包含更多.xhtml文件)。所有文件都有些大(至少 500 行)。

jsf primefaces

4
推荐指数
1
解决办法
2143
查看次数

如何包含类路径通配符作为 java bash 调用的参数?

我正在尝试创建一个 bash 脚本,该脚本将在调用 java 之前构建一个参数列表,但我无法让带有通配符的类路径参数正常工作。到目前为止的脚本:

#!/bin/bash
PROP_FILES=./props/default.properties
#EXTRA_PROP_FILES_HERE

ARGS="-cp \"lib/*\""
ARGS="$ARGS -Xmx10G"
ARGS="$ARGS -Duser.timezone=GMT"
ARGS="$ARGS -Danl.property.files=$PROP_FILES"

java $ARGS main.class.path.Main
Run Code Online (Sandbox Code Playgroud)

问题出在ARGS="-cp \"lib/*\"". 我正在使用命令调试该文件bash -x runscript.sh

如果我转义通配符 cp (如上面的脚本中所示),脚本将失败并显示输出(注意额外的单引号):

java -cp '"lib/*"' ...
Run Code Online (Sandbox Code Playgroud)

如果我不转义它,则会*扩展到 lib 目录中的所有 jar,并且也会失败

如何修改脚本以使其调用此脚本?

java -cp "lib/*" ...
Run Code Online (Sandbox Code Playgroud)

注意:我知道我可以这样做java -cp "lib/*" $ARGS ..,,但我真的很想让它发挥作用。

java bash

2
推荐指数
1
解决办法
665
查看次数

在 iText 7 中使用图像作为水印

iText 7于 2016 年 5 月刚刚发布,虽然其中一些教程很有帮助,但一些更高级的功能却很难弄清楚。这个页面有一个如何使用文本作为水印的例子(大约页面向下的 90%),但我不知道如何使用图像作为水印,我真的不知道从哪里开始随着新版本。有人知道如何在 iText 7 中使用图像作为水印吗?任何想法从哪里开始?

java itext7

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