在Java 8中,有一种新方法String.chars()返回表示字符代码的ints(IntStream)流.我想很多人会期待char这里有一股流.以这种方式设计API的动机是什么?
我想做这样的事情:
@Stateless
public class GreeterEjb {
private final Greeter greeter;
@Inject
public GreeterEjb(Greeter greeter) {
this.greeter = greeter;
}
public String greet() {
return greeter.greet();
}
}
Run Code Online (Sandbox Code Playgroud)
我用Glassfish 3.1.1和JBoss 7.0.2尝试了混合结果.在某些情况下,它可以工作,在其他情况下则不然.如果您对详细信息感兴趣,请参阅Glassfisch论坛中的此主题.
在EJB 3.1规范,部分4.9.2 bean类说:
该类必须具有不带参数的公共构造函数.
这听起来像EJB不允许构造函数注入.
但CDI规范在第3节开头说,会话Bean受CDI支持.然后,第3.2节详细讨论了CDI和EJB,但从未提及有关构造函数注入不起作用的任何内容.这让我觉得它应该被允许.
那么,这些规范是否允许为EJB提供CDI构造函数注入?
码
我有以下类与成员接口:
package com.example.withinterface;
public class SomeClass {
interface SomeInterface {
void doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
另一个类试图访问它:
package com.example.withinterface.main;
import com.example.withinterface.SomeClass;
public class Main {
public static void main(String[] argss) {
System.out.println(SomeClass.SomeInterface.class);
}
}
Run Code Online (Sandbox Code Playgroud)
错误
在Main中我从javac得到以下错误:SomeInterface is not public in SomeClass; cannot be accessed from outside package.
在Eclipse中:SomeInterface is not public in SomeClass; cannot be accessed from outside package.
两者都编译为Java 7.如果我创建SomeInterface,一切编译都很好public.
但规格说
成员接口是一个接口,其声明直接包含在另一个类或接口声明中.
除非指定了访问修饰符,否则类声明中的成员接口是隐式公共的(第6.6节).
在对Java 5的Java语言规范似乎并不具备第二句.
题
所以SomeInterface不应该被认为是公共的,不应该主编译? …
我正在为一个通过构造函数引用遗留类的类编写JUnit.遗产类是在第三方罐子里,所以我不能重构它以使生活更轻松....
这是正在测试的课程......
public MyClass {
public String methodToTest(String param) {
LegacyClass legacy = new LegacyClass(param);
*..... etc ........*
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我想在mockito JUnit中做的事情.
public MyClassTest {
@Test
public void testMethodToTest() throws Exception {
LegacyClass legacyMock = mock(LegacyClass.class);
when(*the LegacyClass constructor with param is called*).thenReturn(legacyMock);
*.... etc.....*
}
}
Run Code Online (Sandbox Code Playgroud)
关于如何做到这一点的任何想法?????
我有一个像这样的 Maven 多模块项目:
foo-parent
foo-module
foo-module-new
foo-other-module1
foo-other-module2
pom.xml
Run Code Online (Sandbox Code Playgroud)
当调用mvn javadoc:aggregatefoo-parent 时,我想从 Javadoc 生成中排除模块foo-module。
excludePackageNames在我的情况下,通过带参数的包名排除不起作用,因为 foo-module 和 foo-module-new 具有相同的包名。
分配List<Object>到List<? super String>工作正常.
分配List<List<Object>>给a List<List<? super String>>不编译.
码
public class Main {
public static void main(String[] args) {
// works fine
List<Object> listOfObject = new ArrayList<>();
takeListSuperString(listOfObject);
// doesn't compile
List<List<String>> listOfListOfObject = new ArrayList<>();
takeListOfListSuperString(listOfListOfObject);
}
static void takeListSuperString(List<? super String> listSuperString) {
}
static void takeListOfListSuperString(List<List<? super String>> listOfListSuperString) {
}
}
Run Code Online (Sandbox Code Playgroud)
题
为什么不List<List<? super String>>一样List<? super String>?
另外,任何想法,我可以在哪里查找这样的东西?
一个相关的问题是Generics hell:hamcrest matcher作为方法参数.但我没有找到有帮助的答案.
编辑
在我终于得到它之前,我必须通过JB …
对于我工作的项目中的JPA-Entities,List或Map类型的属性总是初始化为同步实现Vector和Hashtable.
(Unsynchronized ArrayList和HashMap是Java中的标准实现,除非真的需要同步.)
有谁知道为什么需要同步收藏?我们使用EclipseLink.
当我问起这件事时,没有人知道为什么这样做.它似乎总是像这样完成.也许这是旧版EclipseLink所需要的?
我问的原因有两个:
示例实体:
@Entity
public class Person {
...
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable( ... )
private List<Role> accessRoles;
@ElementCollection
@CollectionTable( ... )
@MapKeyColumn(name="KEY")
@Column(name="VALUE")
private Map<String, String> attrs;
public Person() {
// Why Vector/Hashtable instead of ArrayList/HashMap?
accessRoles = new Vector<Role>();
attrs = new Hashtable<String, String>();
}
public List<Role> getAccessRoles() {
return accessRoles;
}
public void setAccessRoles(List<Role> accessRoles) {
this.accessRoles = accessRoles;
}
public Map<String, String> getAttrs() {
return attrs;
}
public void setAttrs(Map<String, String> attrs) …Run Code Online (Sandbox Code Playgroud)