根据Scala语言规范的第6.19节,这个for循环:
for (e <-p) e'
Run Code Online (Sandbox Code Playgroud)
被翻译成:
p <- e.withFilter{case p => true; case _ => false}.foreach{case p => e?}
Run Code Online (Sandbox Code Playgroud)
那么,为什么这个小程序:
object ForAndPatterns extends App {
class A()
class B() extends A
val list: List[A] = List(new A(), new B(), new B())
for {b: B <- list}
println(b)
}
Run Code Online (Sandbox Code Playgroud)
给出了这个编译错误:
Error:(7, 13) type mismatch;
found : proves.ForAndPatterns.B => Unit
required: proves.ForAndPatterns.A => ?
for {b: B <- list}
Run Code Online (Sandbox Code Playgroud)
当这个表达式:
list.withFilter{case a: B => true; case _ => false}.foreach{case b => println(b)} …
Run Code Online (Sandbox Code Playgroud) 我有一些遗留代码,使用如下代码将对象作为http会话属性:
MyObject object = new MyObject();
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
sessionMap.put("attrname", object);
Run Code Online (Sandbox Code Playgroud)
旧的facelets使用了访问代码
@ManagedProperty("#{attrname}")
private MyObject object;
Run Code Online (Sandbox Code Playgroud)
有没有办法使用CDI(@Inject
)将此会话属性注入Bean?
在使用CDI的新代码中,创建和注入需要以受控方式创建的对象的更好方法是什么.
有谁知道在带有嵌入式 Tomcat 的 Spring Boot Jar 应用程序中引导 Weld 的方法。
我尝试将 org.jboss.weld.environment.servlet.Listener 与
import org.jboss.weld.environment.servlet.Listener;
@SpringBootApplication
public class MyApplication
{
public static void main(String[] args)
{
SpringApplication.run(MyApplication.class, args);
}
@Bean
public Listener weldListener()
{
return new Listener();
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
java.lang.RuntimeException: WELD-ENV-001104: Cannot get StandardContext from ServletContext.
at org.jboss.weld.environment.tomcat.WeldForwardingInstanceManager.getStandardContext(WeldForwardingInstanceManager.java:104) ~[weld-servlet-2.4.6.Final.jar:2.4.6.Final]
...
Caused by: java.lang.ClassCastException: org.apache.catalina.core.StandardContext$NoPluggabilityServletContext cannot be cast to org.apache.catalina.core.ApplicationContextFacade
at org.jboss.weld.environment.tomcat.WeldForwardingInstanceManager.getStandardContext(WeldForwardingInstanceManager.java:101) ~[weld-servlet-2.4.6.Final.jar:2.4.6.Final]
... 13 common frames omitted
Run Code Online (Sandbox Code Playgroud)