小编Are*_*rff的帖子

为什么String.chars()是Java 8中的一个int流?

在Java 8中,有一种新方法String.chars()返回表示字符代码的ints(IntStream)流.我想很多人会期待char这里有一股流.以这种方式设计API的动机是什么?

java string java-8

171
推荐指数
2
解决办法
7万
查看次数

我可以为EJB使用CDI构造函数注入吗?

我想做这样的事情:

@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构造函数注入?

java ejb cdi

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

类声明中的成员接口是否隐式公开?

我有以下类与成员接口:

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.

但规格说

Java 7Java语言规范说明了这一点:

成员接口是一个接口,其声明直接包含在另一个类或接口声明中.

除非指定了访问修饰符,否则类声明中的成员接口是隐式公共的(第6.6节).

对Java 5的Java语言规范似乎并不具备第二句.

所以SomeInterface不应该被认为是公共的,不应该主编译? …

java jls

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

Mockito - 嘲弄遗留类构造函数

我正在为一个通过构造函数引用遗留类的类编写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)

关于如何做到这一点的任何想法?????

java mocking mockito

8
推荐指数
2
解决办法
6807
查看次数

如何在 Maven 多模块项目中从 Javadoc 生成中排除单个模块?

我有一个像这样的 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 具有相同的包名。

maven maven-javadoc-plugin

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

名单<名单<?超级字符串>无法按预期工作

分配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 …

java generics

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

有没有理由使用同步集合初始化实体属性?

对于我工作的项目中的JPA-Entities,List或Map类型的属性总是初始化为同步实现Vector和Hashtable.
(Unsynchronized ArrayList和HashMap是Java中的标准实现,除非真的需要同步.)

有谁知道为什么需要同步收藏?我们使用EclipseLink.


当我问起这件事时,没有人知道为什么这样做.它似乎总是像这样完成.也许这是旧版EclipseLink所需要的?


我问的原因有两个:

  • 我更喜欢像其他地方一样使用标准实现ArrayList和HashMap.如果那是安全的.
  • JDK中没有匹配的同步Set实现.至少不是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)

java jpa eclipselink

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

标签 统计

java ×6

cdi ×1

eclipselink ×1

ejb ×1

generics ×1

java-8 ×1

jls ×1

jpa ×1

maven ×1

maven-javadoc-plugin ×1

mocking ×1

mockito ×1

string ×1