小编cod*_*ker的帖子

如何在类初始化之前避免因访问静态字段而产生的问题?

我有这个代码:

public abstract class Person {

    public static final class Guy extends Person {

        public static final Guy TOM = new Guy();
        public static final Guy DICK = new Guy();   
        public static final Guy HARRY = new Guy();
    }

    public static final List<Guy> GUYS = ImmutableList.of(Guy.TOM, Guy.DICK, Guy.HARRY);
}
Run Code Online (Sandbox Code Playgroud)

我知道,看起来它应该是一个枚举,它会是,但它需要继承自Person,一个抽象类.

我的问题是:如果我试图访问Guys列表,我没关系.但是我尝试特别访问任何一个Guy,我有一个问题:Guy之前加载Person.但是,由于Guy继承Person,Person加载和尝试访问TOM,但由于Guy已经加载,因此无法再次开始加载,因此我们有一个空引用.(并且ImmutableList不接受null,所以我们得到一个例外.)

所以我知道为什么会这样,但我不知道如何避免它.我可以将List移动​​到Guy类中,但是我将有多个实现Person,并且我想拥有类中所有Persons 的主列表Person.

我觉得很有可能加载静态内部类而不加载它的包含类,但我想这是有道理的.有什么方法可以解决这个问题吗?

java static classloader

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

用简明英语列出的项目的正则表达式

这是一个人为的例子,但我试图在这里得出一般原则.

给定使用此类列表形式的英语短语:

I have a cat
I have a cat and a dog
I have a cat, a dog, and a guinea pig
I have a cat, a dog, a guinea pig, and a snake
Run Code Online (Sandbox Code Playgroud)

我可以使用正则表达式获取所有项目,无论有多少项目?请注意,项目可能包含多个单词.

显然,如果我只有一个,那么我可以使用I have a (.+),如果有两个,那么就可以了I have a (.+) and a (.+).

但是,如果我想要匹配的不仅仅是一个例子,事情会变得更加复杂.如果我想从两个例子提取列表中的项目,我想这会工作:I have a (.*)(?: and a (.*))?虽然这部作品的第一阶段,告诉我,我有一个catnull,为第二个它告诉我,我有一个cat and a dognull.当我尝试以更多形式匹配短语时,事情变得更糟.

有什么方法可以为此目的使用正则表达式吗?这似乎相当简单,我不明白为什么我的正则表达式匹配2项目列表工作,但匹配1-或2项目列表的正则表达不起作用.

java regex

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

可选<T>的比较器

我有 abstract class OptionalComparator<T extends Comparable<T>> implements Comparator<Optional<T>>

到现在为止还挺好.

遵循Optional本身使用的模型,我认为最好有一个这个类的单个实例,并在必要时(例如,to OptionalComparator<Integer>)进行转换.

所以我做了private static final OptionalComparator<? extends Comparable<?>> ABSENT_FIRST.

当我试图分配一个值时出现了麻烦.该类型应该是什么?

new OptionalComparator<Comparable<Object>>() {...} 不起作用.

new OptionalComparator<Comparable<Comparable<Object>>>() {...} 不起作用.

new OptionalComparator<Integer>() {...} 确实有用,但我想要最不具体的类型.

我究竟做错了什么?如何创建此类的基本案例实例?

java generics guava

5
推荐指数
2
解决办法
5263
查看次数

负边距和边框

我有一些图像想要使用负边距进行堆叠。然而,由于堆叠没有明确定义边界的图像可能会在视觉上造成混乱,因此我认为应该在它们周围添加边框。奇怪的是,即使图像正确堆叠,它们的边框最终会位于前一个元素的下方。

为什么这是我得到的行为,有没有办法让边框以其直观的水平出现?

#second {
  margin-top: -50px;
  margin-left: 20px;
}

img {
  border: 5px ridge green;
  display: block;
}
Run Code Online (Sandbox Code Playgroud)
<div><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/RCA_Indian_Head_test_pattern.JPG/312px-RCA_Indian_Head_test_pattern.JPG" height="100" width="auto"><img id="second" src="https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/RCA_Indian_Head_test_pattern.JPG/312px-RCA_Indian_Head_test_pattern.JPG" height="100" width="auto"></div>
Run Code Online (Sandbox Code Playgroud)

编辑:在 Firefox 上,它看起来像这样: 火狐边框

css margin cross-browser

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

将一个元素与多个兄弟元素一起居中

我有一个带有一定数量跨度的 div,它的宽度可能相等,也可能不相等。我知道我可以text-align: center用来使 div 中的所有内容居中。但是,我想选择一个特定的跨度,并将其指定为真正的中心,而不是中心是跨度序列的中点。

我必须模拟这种效果的一个想法是:我想要的中间元素在其左右两侧有两个容器;左边的将是右对齐的,反之亦然。这些容器将保存 div 中的其他内容。如果我可以让这两个容器以等量填充剩余空间,这将具有居中中间元素同时保持左右内容与中心对齐的效果。基本上,这需要将两个容器的宽度设置为 div 中剩余空间的一半。(我不想改变中间 div 的大小。)这可能只用 CSS 吗?

示例:有 4 个跨度,如何将跨度 2 指定为真正的中心?

div {
  width: 500px;
  padding: 4px;
  border: 1px dotted black;
}
span {
  display: inline-block;
  width: 100px;
  text-align: center;
  margin: 4px;
  box-sizing: border-box;
  border: 1px dotted black;
}
#b {
  /* ??? */
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <span id="a">1</span>
  <span id="b">2</span>
  <span id="c">3</span>
  <span id="d">4</span>
</div>
Run Code Online (Sandbox Code Playgroud)

html css centering

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

每次使用 Guava Splitters/Joiners 时都应该创建它们吗?

Guava 包含用于拆分和连接字符串的实用程序,但它需要实例化 Splitter/Joiner 对象才能这样做。这些是通常只包含要拆分/加入的字符的小对象。维护对这些对象的引用以便重用它们是一个好主意,还是只在需要时创建它们并让它们被垃圾收集更好?

例如,我可以通过以下两种方式实现此方法:

String joinLines(List<String> lines) {
  return Joiner.on("\n").join(lines);
}
Run Code Online (Sandbox Code Playgroud)

或者

static final Joiner LINE_JOINER = Joiner.on("\n");

String joinLines(List<String> lines) {
  return LINE_JOINER.join(lines);
}
Run Code Online (Sandbox Code Playgroud)

我发现第一种方法更具可读性,但每次调用该方法时都创建一个新的 Joiner 似乎很浪费。

java instance guava

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

如何模拟元素的不透明效果而不使其透明?

我希望 div 具有filter:opacity(0.5)白色背景上的“灰色”外观,但我不想真正使其透明。我该怎么做呢?我知道一个解决方案就是在其后面放置另一个带有白色背景的元素,但我正在寻找一种仅具有 CSS 滤镜效果的更简单的解决方案。

css css-filters

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

为什么 Java 8 使用 null 时,Guava 的Optional 使用抽象类?

当Java 8发布时,我期望发现它的Optional实现与Guava的基本相同。从用户的角度来看,它们几乎是相同的。但是Java 8的Optional在内部使用null来标记一个空的Optional,而不是使Optional抽象并有两个实现。除了 Java 8 的版本感觉不对(你只是通过隐藏你实际上仍在使用它们的事实来避免空值)之外,每次你想访问它时检查你的引用是否为空不是效率较低吗?而不是仅仅调用一个抽象方法?也许不是,但我想知道他们为什么选择这种方法。

java null guava java-8

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

范围重叠时使用多个defaultCommands

我有一个h:form包含a p:defaultCommand,它将其范围定义为该形式.但是,我也有一个p:dialog,我希望有一个不同的默认命令.我可以p:defaultCommand在对话框中放入另一个,并将其范围设置为对话框,但表单中的默认命令优先于它.我查看了生成的HTML,对话框只是表单中的一个元素.有没有办法让这两个元素使用不同的默认命令?

jsf primefaces

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

当集合为空时,省略JAXB中的包装器标签

在JAXB中,可以使用@XmlElementWrapper属性来指定用于包装元素集合的标记。但是,即使集合为空,这些包装标签也会出现(如果集合为,则不会出现null)。如果集合为空,有什么方法可以让JAXB省略包装器标签?在集合上使用适配器似乎无效,因为JAXB将此解释为意味着应将适配器应用于集合中的每个元素。

java xml jaxb

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