请考虑以下代码:
public class Converter {
public <K> MyContainer<K> pack(K key, String[] values) {
return new MyContainer<>(key);
}
public MyContainer<IntWrapper> pack(int key, String[] values) {
return new MyContainer<>(new IntWrapper(key));
}
public static final class MyContainer<T> {
public MyContainer(T object) { }
}
public static final class IntWrapper {
public IntWrapper(int i) { }
}
public static void main(String[] args) {
Converter converter = new Converter();
MyContainer<IntWrapper> test = converter.pack(1, new String[]{"Test", "Test2"});
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码编译没有问题.但是,如果一个人改变String[]
,以String...
在两个pack
签名和 …
当我在使用泛型时,我发现了一些东西.在下面的示例中,doStuff1
编译但doStuff2
不:
public <T extends Foo> void doStuff1(T value) {
Class<? extends Foo> theClass = value.getClass();
}
public <T extends Foo> void doStuff2(T value) {
Class<? extends T> theClass = value.getClass();
}
Run Code Online (Sandbox Code Playgroud)
所以,我查阅了文档Object.getClass()
,发现了这个:
实际的结果类型是Class <?extends | X |> where | X | 是调用getClass的表达式的静态类型的擦除.
这让我有点好奇.为什么getClass()
这样设计?如果适用的话,我可以理解将类型转换为它们的原始类,但我认为没有明显的理由为什么它们必须使它也被杀掉T
.有没有一个特定的原因,它也可以摆脱它,或者它只是一个普遍的"让我们摆脱一切因为它更容易;谁会永远需要它"的方法?
如果之前已经提出过这个问题,请指出相关问题.
tl; dr:如何根据英国规则忽略套管,比较JavaScript中的两个字符串?
我的代码分析和比较来自两个不同来源的数据,每个来源对关键字是大写还是小写都有不同的看法,这意味着需要进行不区分大小写的比较.但是,如果在其他文化中使用(例如土耳其及其与字母I的臭名昭着的问题),我不希望系统中断.
JavaScript是否有任何方法可以进行与文化无关(读取:英语)不区分大小写的字符串比较?
在Excel中,如果单元格A1有一些以特定方式格式化的值,单元格B1是否有方法引用A1中显示的字符串?
澄清:
这样的事情可能吗?
如果我有Stream<T>
,我可以轻松skip(long)
地跳过流的前几个元素.但是,在流的末尾跳过给定数量的元素似乎没有等价物.
最明显的解决方案是使用limit(originalLength - elementsToRemoveAtEnd)
,但这需要事先知道初始长度,但情况并非总是如此.
有没有办法删除未知长度的流的最后几个元素而不必将其收集到a中Collection
,计算元素并再次流式传输?
假设我们有两个通用的Java接口:Foo<T>
并且Bar<T>
,其中可能有许多实现.现在,假设我们想要将每个中的一个存储在一个类中,两者都使用相同的值T
,但保持键入的确切实现:
public interface FooBar<T, TFoo extends Foo<T>, TBar extends Bar<T>> {
TFoo getFoo();
TBar getBar();
}
Run Code Online (Sandbox Code Playgroud)
以上,T
仅用于强制执行该操作,TFoo
并且TBar
类使用相同的类型参数.添加此类型参数FooBar
似乎是多余的,原因有两个:
FooBar
根本不关心T
.T
也可以从TFoo
和推断TBar
.因此,我的问题是,是否有办法强制执行这样的条件而不会混淆FooBar
类型参数列表.必须写FooBar<String, StringFoo, StringBar>
而不是理论上等同FooBar<StringFoo, StringBar>
于我看起来很难看.
假设我使用的是一个记录不完整的第三方库,其中没有源代码可用.其中一个库的方法接受InputStream
加载各种数据.
由于缺少文档,不清楚该方法是否在完成后关闭流,因此一种可能的解决方案可能是将调用包装在try-with-resource中,只是为了安全起见.
不幸的是,Java规范(据我所知)没有提到如果在try-with-resource中手动关闭资源会发生什么.有谁碰巧知道吗?
我的一个电子表格涉及各种计算,其中包括当前的日期和时间,如果让它自动刷新一次,而不是手动不得不按F9或改变其中一个单元格,这将是很好的.
Excel中是否有某种方法可以将电子表格设置为每x秒自动重新计算一次?
我无法在Excel中找到设置,也许表明不存在此类功能.如果没有,可以通过VBA实现吗?(后者可能听起来也可能不是一个愚蠢的问题,但我以前没有编写Excel宏的经验,因此不知道它在操作电子表格方面的能力是什么.)
在Java 8之前,我的观察是,引用成员方法的事实标准是使用#
符号(例如Object#toString()
).然后是Java 8,它选择了::
运算符进行方法引用,看似没有理由.
对于为何::
特别选择了原因,是否有官方解释或理由?
谷歌搜索,搜索这个网站和随机实验没有产生任何东西,所以这里.
我正在开发一个包含不同Maven项目的项目,其中有几个项目需要运行才能使系统正常运行.(客户端,服务器等)单独启动它们有点不方便,但正如这个问题所暗示的那样,没有办法将它们分组到一个配置中(自那个答案以来情况似乎也没有改变).
相反,我现在想知道是否可以将运行/调试特定配置映射到工具栏,即具有"运行项目1"按钮,"调试项目3-C"按钮等,而不是必须执行打开列表,选择配置并单击每个所需组件的运行/调试的三步过程.
有谁知道这样做的方法?
java ×6
excel ×2
generics ×2
java-8 ×2
cell ×1
culture ×1
excel-vba ×1
format ×1
java-stream ×1
javascript ×1
operators ×1
overloading ×1
syntax ×1
type-erasure ×1
vba ×1