小编mat*_*eus的帖子

Java 8 - 区域设置查找行为

在Java 8中引入Locale.lookup(),基于RFC 4647,允许用户Locale根据优先级列表找到最佳匹配列表LocaleRange.现在我不明白这种方法的每个角落情况.以下公开了一个我想要解释的具体案例:

// Create a collection of Locale objects to search
Collection<Locale> locales = new ArrayList<>();
locales.add(Locale.forLanguageTag("en-GB"));
locales.add(Locale.forLanguageTag("en"));

// Express the user's preferences with a Language Priority List
String ranges = "en-US;q=1.0,en-GB;q=1.0";
List<Locale.LanguageRange> languageRanges = Locale.LanguageRange.parse(ranges);

// Find the BEST match, and return just one result
Locale result = Locale.lookup(languageRanges,locales);
System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)

这打印en,我会直观地预期en-GB.

注意:

  • 如果你有一个范围"en-GB;q=1.0,en-US;q=1.0"(GB和US反转),这将打印en-GB,
  • 如果你有一个范围"en-US;q=0.9,en-GB;q=1.0"(GB的优先级高于美国),这将打印出来en-GB.

有人可以解释这种行为背后的理由吗?

java locale java-8

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

我们第一次使用类时是否总是执行静态代码?

我们的应用程序使用初始化代码,这取决于执行静态代码的顺序,我想知道这个顺序是否在所有JVM中都是一致的.

这是我的意思的样本:


public class Main {

    static String staticVar = "init_value";

    public static void main(String[] args) {

        System.out.println(A.staticVar);
        staticVar = "mainValue";
        System.out.println(A.staticVar);
    }
}

public class A {
    static String staticVar = Main.staticVar;
}

Run Code Online (Sandbox Code Playgroud)

会给:

init_value
init_value


public class Main {

    static String staticVar = "init_value";

    public static void main(String[] args) {

        // System.out.println(A.staticVar);
        staticVar = "mainValue";
        System.out.println(A.staticVar);
    }
}

public class A {
    static String staticVar = Main.staticVar;
}

Run Code Online (Sandbox Code Playgroud)

会给(在我的环境):

mainValue

总而言之,在所有JVM中,当我们第一次使用类时,是否总是执行静态代码?

java static jvm final

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

包含Set的@ManyToMany Map的JPA2持久性

我需要Map<Item, Set<Item>>使用JPA2注释来持久保存类型的成员.关系是多对多,Item对象是实体.

我应该创建一个单独的中间实体持有Set<Item>还是直接映射?

如果缺少某些背景,请告知.

java orm jpa jpa-2.0

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

用于在命令行上编写表的Java库

有没有人知道一个库,它会将String [] []转换为String表,如下所示?

| title1 | title2 |
|________|________|
| blah   | blih   |
| blah2  | blih2  |
etc...

我可以为此编写格式化的字符串,但它将是非通用代码,与参数相关联.为此目的编写通用代码比我愿意投资的代码更昂贵.

总而言之,我认为图书馆可以证明这一点.

知道这是否存在?

java command-line

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

java 8可选map()使用函数引用抛出NPE,但不使用完整的lambda语法

这是一个错误还是一个功能?

NPE下面失败了

Function<String, String> f = null;
Optional.<String>empty().map(f).orElse(null);
Run Code Online (Sandbox Code Playgroud)

但不是

Function<String, String> f = null;
Optional.<String>empty().map(value -> f.apply(value)).orElse(null);
Run Code Online (Sandbox Code Playgroud)

例如,IntelliJ建议用第二个表达式替换第二个表达式作为等价物,这对我来说是有意义的,直到现在.

这种行为的原因是执行Optional#map():

public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
    // check happens before the branching
    Objects.requireNonNull(mapper);
    if (!isPresent())
        return empty();
    else {
        return Optional.ofNullable(mapper.apply(value));
    }
}
Run Code Online (Sandbox Code Playgroud)

相反,如果map()实施时:

public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
    if (!isPresent())
        return empty();
    else {
        // the check happens only when relevant
        Objects.requireNonNull(mapper);
        return Optional.ofNullable(mapper.apply(value));
    }
}
Run Code Online (Sandbox Code Playgroud)

我们会在前两个片段之间获得一致的行为.任何理由 …

java lambda intellij-idea java-8

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

标签 统计

java ×5

java-8 ×2

command-line ×1

final ×1

intellij-idea ×1

jpa ×1

jpa-2.0 ×1

jvm ×1

lambda ×1

locale ×1

orm ×1

static ×1