我遇到过一些我在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>.有人可以解释一下吗?
我们有多个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) 我一直在从事一个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) iText 7 表单字段中的默认行距似乎是 2 或 1.5,但我真的很想删除行距。通常情况下,我组线通过调用间隔setMultipliedLeading(..)一个上Paragraph对象,但也PdfAcroForm也不的亚类中,PdfTextFormField有这样的方法,只有字符串可以被设置为表单字段值。如何设置行距的值?提前致谢。
今天我用Javascript发现了一些奇怪的事:
console.log(new Date(null)); // 1970-01-01T00:00:00.000Z
console.log(new Date(undefined)); // Invalid DateRun Code Online (Sandbox Code Playgroud)
为什么会这样?我知道null和undefined不一样,但在这种情况下我会期望相同的结果.
有什么方法可以确定哪一行(甚至是什么文件)导致
表单组件需要在其祖先中有一个 UIForm。建议:将必要的组件包含在
来自 Primefaces 的警告信息?我刚刚开始处理一个已建立的项目,其中包含许多带有各种模板和继承的 .xhtml 文件(由其他人编写),但我无法确定导致问题的文件的范围。
我试过谷歌搜索但没有运气,我找不到关于如何找到错误来源的答案。
更新:它不像转到 url 中显示的页面那么简单。例如,当我导航到 时会显示警告'../foo.xhtml',但是,它foo.xhtml实现了一个模板并包含多个其他.xhtml文件(每个文件又包含更多.xhtml文件)。所有文件都有些大(至少 500 行)。
我正在尝试创建一个 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 ×4
itext7 ×2
bash ×1
generics ×1
javascript ×1
jboss ×1
jsf ×1
maven ×1
primefaces ×1
tomcat ×1