小编LuC*_*Cio的帖子

Eclipse Photon不解析测试源中的导入

我已经使用现有工作区迁移到Eclipse Photon.我在这个工作区中有一些Maven项目.所有项目在Eclipse Oxygen中都没有任何错误.打开我的工作区在Eclipse光子所有测试类,其进口之后org.mockito.Mockito,org.springframework.mockorg.springframework.test有错误.虽然Eclipse知道它们,但无法解析这些导入,因为我可以跳转到类中.

为什么Eclipse Photon无法解析这些导入?我该如何解决这个问题?

java testing spring-test mockito eclipse-photon

17
推荐指数
2
解决办法
6801
查看次数

Spliterator与Stream.Builder

我读了一些关于如何创建有限的问题Stream( 在Java中有限生成的流 - 如何创建一个?,流如何停止?).

答案建议实施一个Spliterator.在Spliterator将实现逻辑如何和元件,以提供为下一个(tryAdvance).但也有其他两个非默认的方法trySplitestimateSize()我将不得不执行.

JavaDoc Spliterator说:

用于遍历和分区源元素的对象.a覆盖的元素源Spliterator可以是例如阵列,a Collection,IO通道或生成器函数.... Spliterator除了顺序遍历之外,API还支持有效的并行遍历,支持分解以及单元素迭代....

另一方面,我可以实现逻辑如何前进到a周围的下一个元素Stream.Builder并绕过a Spliterator.在每次前进时我都会打电话accept或者add最后打电话build.所以它看起来很简单.

JavaDoc说什么?

一个可变的建设者Stream.这允许Stream 通过单独生成元素并将它们添加到Builder (无需使用ArrayList作为临时缓冲区的复制开销)来创建.

使用StreamSupport.stream我可以用a Spliterator来获取Stream.并且Builder还将提供一个Stream.

什么时候应该/我可以使用Stream.Builder
只有当a Spliterator不会更高效时(例如因为无法对源进行分区并且无法估计其大小)?

java builder java-8 java-stream spliterator

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

Java NIO 在目录中搜索文件

我想使用 Java NIO 和 glob 在特定目录中搜​​索文件(不知道全名)。

public static void match(String glob, String location) throws IOException {

        final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(
                glob);

        Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path path,
                    BasicFileAttributes attrs) throws IOException {
                if (pathMatcher.matches(path)) {
                    System.out.println(path);
                }
                return FileVisitResult.CONTINUE;
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

阅读一些教程我这样做了。如果我找到(第一个)具有给定 glob 字符串的文件,我只想返回字符串。

if (pathMatcher.matches(path)) {
    return path.toString();
}
Run Code Online (Sandbox Code Playgroud)

java nio glob file

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

在Java中是否可以更改或修改枚举本身,从而破坏枚举单例?

是否有可能以某种方式在运行时更改枚举?例如使用反射.问题不是要改变枚举常量的状态.它将要更改枚举的常量集或删除任何常量.

关于以下枚举,是否可以添加颜色WHITE或删除颜色RED或更改其顺序?

public enum Color {

  RED, GREEN, BLUE;

}
Run Code Online (Sandbox Code Playgroud)

我为什么这么问?

我知道这个问题有点恶意.但即使是约书亚布洛赫在谈论(1)关于实施单身人士并推荐了枚举单身人士模式时也提到了" 巧妙制造的攻击 ".如果我们可以修改枚举,那么对这种模式的攻击是否可行?

我试图解决它并部分管理它.我将发布我的结果作为答案 - 遵循这个建议.


(1)请参阅在Java中实现单例模式的有效方法是什么?其中包含指向effective_java_reloaded.pdf的链接,第31页.

java reflection singleton enums

4
推荐指数
2
解决办法
594
查看次数

如何在Optional类中自定义NoSuchElementException的错误消息

NotFoundException我有一个方法,如果我的对象 id 是 则抛出null

public void removeStatementBundleService(String bundleId) throws NotFoundException {
    Optional<StatementBundle> bundleOpt = statementBundleRepository.findById(bundleId);

    if(bundleOpt.isPresent()) {
        StatementBundle bundle = bundleOpt.get();

        if(bundle.getStatements() != null && !bundle.getStatements().isEmpty()) {               
            for(Statement statement: bundle.getStatements()) {
                statementRepository.delete(statement);
            }
        }

        if(bundle.getFileId() != null) {
            try {
                fileService.delete(bundle.getFileId());
            } catch (IOException e) {
                e.printStackTrace();
            }   
        }

        statementBundleRepository.delete(bundle);

    } else {
        throw new NotFoundException("Statement bundle with id: " + bundleId + " is not found.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现由于java.util.Optional使用了该类,所以不需要这样做。在oracle文档中我发现get()使用了if并且没有值然后NoSuchElementException抛出。将错误消息添加到异常的最佳方法是什么?我试图Optional …

java option-type

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

用于Bigdecimal null验证的三元运算符

为什么我在这段代码中得到空指针异常?

    BigDecimal test = null;
    String data = "";
    try {
    System.out.println(test==null?"":test.toString());
    data = test==null?"":test.toString();
    System.out.println(data);
    data = data +  " " + test==null?"":test.toString(); // catching null pointer in this line
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

java ternary-operator nullpointerexception bigdecimal

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

如何在Optional.map()中使用方法引用

我有一个可选的.

Optional<AssetEvent> latestEvent = ...
Run Code Online (Sandbox Code Playgroud)

我想从事件内部添加一个字段到列表(如果存在).

latestEvent.map(event -> event.getTimestamp()).ifPresent(latestList::add);
Run Code Online (Sandbox Code Playgroud)

我的IDE(Intelij)向我展示了"Lambda可以替换为方法引用" event.getTimestamp()

重构为

latestEvent.map(this::getTimestamp).ifPresent(latestList::add);
Run Code Online (Sandbox Code Playgroud)

给我一个错误,因为this将在代码执行的内容中引用周围的Object.我如何在Optional中引用Object的方法latestEvent

java methods reference optional java-8

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

Java枚举反向查找

所以我有这个枚举不能按我的预期工作,需要一些修改:

public enum MyEnum {

    CODE000("text description comes here"),

    private final String value;

    private static final Map<String, MyEnum> LOOKUP = Maps.uniqueIndex(
            Arrays.asList(MyEnum.values()),
            MyEnum::getValue
    );

    MyEnum(final String value) {
        this.value = value;
    }

    public String getValue() {
        return value;

    }


    public static MyEnum fromStatus(String status) {
        return LOOKUP.get(status);
    }
}
Run Code Online (Sandbox Code Playgroud)

它现在的工作方式是:

MyEnum.fromStatus("text description comes here") 当然,我想要反过来:

MyEnum.fromStatus("CODE000") 归还我 "text description comes here"

有人可以建议我如何改变这个吗?

java enums

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

为NullPointerException,JAVA 8编写多个检查的替代方法

有没有更好的方法在JAVA 8中编码?

    if (info1 != null && info1.getId() != null && info1.getPartyNumber()!= null) {
        billing.setSenderId(info1.getId());
        billing.setSenderNumber(info1.getPartyNumber());
    }
    if (info2 != null && info2.getId() != null && info2.getPartyNumber()!= null) {
        billing.setReceiverId(info2.getId());
        billing.setSellerNumber(info2.getPartyNumber());            
    }

    ..
    ..
Run Code Online (Sandbox Code Playgroud)

提前致谢.注意:我调查Optional.ofNullable()但不确定这是否真的有助于多次检查?

java null conditional optional java-8

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

删除int数组中的前导零

尝试通过删除Int数组中的前导零来合并数字.

int[] array = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 5 };
for (int i = 0; i < arr.length; i++) {
    String.format("%09d", array[i]);
}

for (int i = 0; i < arr.length; i++) {
    System.out.print(array[i]);
}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

405
Run Code Online (Sandbox Code Playgroud)

java arrays int

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