小编Sma*_*ker的帖子

Java:重载歧义的通用方法

请考虑以下代码:

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签名和 …

java generics overloading variadic-functions

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

Java:有界类型的getClass()

当我在使用泛型时,我发现了一些东西.在下面的示例中,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.有没有一个特定的原因,它也可以摆脱它,或者它只是一个普遍的"让我们摆脱一切因为它更容易;谁会永远需要它"的方法?

java type-erasure type-parameter

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

JavaScript:与文化无关的不区分大小写的字符串比较

如果之前已经提出过这个问题,请指出相关问题.

tl; dr:如何根据英国规则忽略套管,比较JavaScript中的两个字符串?

我的代码分析和比较来自两个不同来源的数据,每个来源对关键字是大写还是小写都有不同的看法,这意味着需要进行不区分大小写的比较.但是,如果在其他文化中使用(例如土耳其及其与字母I的臭名昭着的问题),我不希望系统中断.

JavaScript是否有任何方法可以进行与文化无关(读取:英语)不区分大小写的字符串比较?

javascript culture string-comparison

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

在Excel中将单元格值引用为字符串

在Excel中,如果单元格A1有一些以特定方式格式化的值,单元格B1是否有方法引用A1中显示的字符串?

澄清:

  • 例如,如果A1显示时间10:31:48,我希望B1将这个输出的字符串引用给用户("10:31:48",而不是基础数字表示"0.43875").
  • 我很清楚,有手动格式化值的功能.但是,我正在寻找的是从另一个单元复制已经格式化的值,无论该单元格可能具有什么格式.

这样的事情可能吗?

format excel cell

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

跳过Stream <T>中的最后x个元素

如果我有Stream<T>,我可以轻松skip(long)地跳过流的前几个元素.但是,在流的末尾跳过给定数量的元素似乎没有等价物.

最明显的解决方案是使用limit(originalLength - elementsToRemoveAtEnd),但这需要事先知道初始长度,但情况并非总是如此.

有没有办法删除未知长度的流的最后几个元素而不必将其收集到a中Collection,计算元素并再次流式传输?

java java-8 java-stream

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

Java:建立类型参数之间的相关性

假设我们有两个通用的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似乎是多余的,原因有两个:

  1. FooBar根本不关心T.
  2. 即使它确实如此,T也可以从TFoo和推断TBar.

因此,我的问题是,是否有办法强制执行这样的条件而不会混淆FooBar类型参数列表.必须写FooBar<String, StringFoo, StringBar>而不是理论上等同FooBar<StringFoo, StringBar>于我看起来很难看.

java generics type-parameter

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

在try-with-resource中手动关闭

假设我使用的是一个记录不完整的第三方库,其中没有源代码可用.其中一个库的方法接受InputStream加载各种数据.

由于缺少文档,不清楚该方法是否在完成后关闭流,因此一种可能的解决方案可能是将调用包装在try-with-resource中,只是为了安全起见.

不幸的是,Java规范(据我所知)没有提到如果在try-with-resource中手动关闭资源会发生什么.有谁碰巧知道吗?

java try-with-resources

6
推荐指数
2
解决办法
1749
查看次数

Excel:每x秒重新计算一次

我的一个电子表格涉及各种计算,其中包括当前的日期和时间,如果让它自动刷新一次,而不是手动不得不按F9或改变其中一个单元格,这将是很好的.

Excel中是否有某种方法可以将电子表格设置为每x秒自动重新计算一次?

我无法在Excel中找到设置,也许表明不存在此类功能.如果没有,可以通过VBA实现吗?(后者可能听起来也可能不是一个愚蠢的问题,但我以前没有编写Excel宏的经验,因此不知道它在操作电子表格方面的能力是什么.)

excel vba excel-vba

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

为什么选择Java 8的双冒号运算符?

在Java 8之前,我的观察是,引用成员方法的事实标准是使用#符号(例如Object#toString()).然后是Java 8,它选择了::运算符进行方法引用,看似没有理由.

对于为何::特别选择了原因,是否有官方解释或理由?

java syntax operators java-8

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

IntelliJ:将特定配置的运行/调试映射到工具栏

谷歌搜索,搜索这个网站和随机实验没有产生任何东西,所以这里.

我正在开发一个包含不同Maven项目的项目,其中有几个项目需要运行才能使系统正常运行.(客户端,服务器等)单独启动它们有点不方便,但正如这个问题所暗示的那样,没有办法将它们分组到一个配置中(自那个答案以来情况似乎也没有改变).

相反,我现在想知道是否可以将运行/调试特定配置映射到工具栏,即具有"运行项目1"按钮,"调试项目3-C"按钮等,而不是必须执行打开列表,选择配置并单击每个所需组件的运行/调试的三步过程.

有谁知道这样做的方法?

intellij-idea

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