我有这个代码:
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.
我觉得很有可能加载静态内部类而不加载它的包含类,但我想这是有道理的.有什么方法可以解决这个问题吗?
这是一个人为的例子,但我试图在这里得出一般原则.
给定使用此类列表形式的英语短语:
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 (.*))?虽然这部作品的第一阶段,告诉我,我有一个cat和null,为第二个它告诉我,我有一个cat and a dog和null.当我尝试以更多形式匹配短语时,事情变得更糟.
有什么方法可以为此目的使用正则表达式吗?这似乎相当简单,我不明白为什么我的正则表达式匹配2项目列表工作,但匹配1-或2项目列表的正则表达不起作用.
我有 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>() {...} 确实有用,但我想要最不具体的类型.
我究竟做错了什么?如何创建此类的基本案例实例?
我有一些图像想要使用负边距进行堆叠。然而,由于堆叠没有明确定义边界的图像可能会在视觉上造成混乱,因此我认为应该在它们周围添加边框。奇怪的是,即使图像正确堆叠,它们的边框最终会位于前一个元素的下方。
为什么这是我得到的行为,有没有办法让边框以其直观的水平出现?
#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)
我有一个带有一定数量跨度的 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)
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 似乎很浪费。
我希望 div 具有filter:opacity(0.5)白色背景上的“灰色”外观,但我不想真正使其透明。我该怎么做呢?我知道一个解决方案就是在其后面放置另一个带有白色背景的元素,但我正在寻找一种仅具有 CSS 滤镜效果的更简单的解决方案。
当Java 8发布时,我期望发现它的Optional实现与Guava的基本相同。从用户的角度来看,它们几乎是相同的。但是Java 8的Optional在内部使用null来标记一个空的Optional,而不是使Optional抽象并有两个实现。除了 Java 8 的版本感觉不对(你只是通过隐藏你实际上仍在使用它们的事实来避免空值)之外,每次你想访问它时检查你的引用是否为空不是效率较低吗?而不是仅仅调用一个抽象方法?也许不是,但我想知道他们为什么选择这种方法。
我有一个h:form包含a p:defaultCommand,它将其范围定义为该形式.但是,我也有一个p:dialog,我希望有一个不同的默认命令.我可以p:defaultCommand在对话框中放入另一个,并将其范围设置为对话框,但表单中的默认命令优先于它.我查看了生成的HTML,对话框只是表单中的一个元素.有没有办法让这两个元素使用不同的默认命令?
在JAXB中,可以使用@XmlElementWrapper属性来指定用于包装元素集合的标记。但是,即使集合为空,这些包装标签也会出现(如果集合为,则不会出现null)。如果集合为空,有什么方法可以让JAXB省略包装器标签?在集合上使用适配器似乎无效,因为JAXB将此解释为意味着应将适配器应用于集合中的每个元素。