小编Eya*_*der的帖子

编译器使用泛型方法的null参数表现不同

以下代码与Eclipse完美编译,但无法使用javac进行编译:

public class HowBizarre {
      public static <P extends Number, T extends P> void doIt(P value) {
      }

      public static void main(String[] args) {
            doIt(null);
      }
}
Run Code Online (Sandbox Code Playgroud)

我简化了代码,所以现在根本不使用T. 不过,我没有看到错误的原因.由于某种原因,javac决定T代表Object,然后抱怨Object不符合T的界限(这是真的):

HowBizarre.java:6:不兼容的类型; 推断类型参数java.lang.Number,java.lang.Object不符合类型变量的范围P(T)

发现:<P,T>无效

要求:无效

       doIt(null);
           ^
Run Code Online (Sandbox Code Playgroud)

请注意,如果我将null参数替换为非null值,则编译正常.

哪个编译器行为正确,为什么?这是其中之一的错误吗?

java eclipse generics null compilation

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

如何将分钟转换为天,小时,分钟

如何在java中将分钟转换为小时和分钟(我们这里有一周,7天)

 public String timeConvert(int time){
   String t = "";

   int h = 00;
   int m = 00;

  // h= (int) (time / 60);
  // m = (int) (time % 60);

  // if(h>=24) h=00;

   if((time>=0) && (time<=24*60)){
      h= (int) (time / 60);
      m = (int) (time % 60);
   }else if((time>24*60) && (time<=24*60*2)){
       h= (int) (time / (1440));
      m = (int) (time % (1440));
   }else if((time>24*60*2) && (time<=24*60*3)){
       h= (int) (time / (2880));
      m = (int) (time % (2880));
   }else if((time>24*60*3) && …
Run Code Online (Sandbox Code Playgroud)

java time duration

14
推荐指数
5
解决办法
4万
查看次数

模拟Bigquery进行集成测试

虽然在我的Java集成测试中其他接口相对容易模拟,但我找不到一种模拟Bigquery的正确方法.

一种可能性就是模仿我在Bigquery本身上面编写的图层,但我更喜欢以更自然的方式模仿Bigquery.我正在寻找一种有限的轻量级实现,它允许定义表内容,并支持使用标准API的查询.有这样的图书馆吗?如果没有,建议采用哪种替代方法?

java integration-testing google-bigquery

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

Java Streams - 有效地对排序流上的项目进行分组

我正在寻找一种方法来实现非终端分组操作,这样内存开销将是最小的.

例如,考虑distinct().在一般情况下,它别无选择,只能收集所有不同的项目,然后才向前流式传输.但是,如果我们知道输入流已经排序,则可以使用最少的内存"在运行中"完成操作.

我知道我可以使用迭代器包装器并自己实现分组逻辑来实现迭代器.是否有更简单的方法来使用流API来实现它?

- 编辑 -

我发现了一种滥用Stream.flatMap(..)来实现此目的的方法:

  private static class DedupSeq implements IntFunction<IntStream> {
    private Integer prev;

    @Override
    public IntStream apply(int value) {
      IntStream res = (prev != null && value == prev)? IntStream.empty() : IntStream.of(value);
      prev = value;
      return res;
    }    
  }
Run Code Online (Sandbox Code Playgroud)

然后:

IntStream.of(1,1,3,3,3,4,4,5).flatMap(new DedupSeq()).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

1
3
4
5
Run Code Online (Sandbox Code Playgroud)

通过一些更改,相同的技术可用于任何类型的存储器有效的流序列分组.无论如何,我不太喜欢这个解决方案,而且我正在寻找更自然的东西(比如映射或过滤工作的方式).此外,我在这里违约,因为提供给flatMap(..)的函数是有状态的.

java java-8 java-stream

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

是否将字符串封装为byte []以节省内存过量?(JAVA)

最近审查了一些Java Swing代码并看到了这个:

byte[] fooReference;

String getFoo() {
   returns new String(fooReference); 
}

void setFoo(String foo) {
  this.fooReference = foo.getBytes();
}
Run Code Online (Sandbox Code Playgroud)

以上内容可以节省你的记忆足迹,或者我告诉你.

这种矫枉过正的是其他人以这种方式封装他们的字符串吗?

java oop string byte memory-management

6
推荐指数
3
解决办法
2700
查看次数

IDFA/GAID 信函案例

是否有关于 IDFA(广告标识符)和 GAID(Google 广告 ID)的字母大小写的标准/约定?

我找不到任何关于这一点的结论。相关文件的链接将不胜感激。

mobile android ads ios idfa

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

高效的哈希码函数

我有一个Employee有很多属性的类.其中一个属性是employeeId类型int.

我可以使用hascode功能Employee如下吗?

int hashCode(){
    return new Integer(employeeId).hashCode();
}
Run Code Online (Sandbox Code Playgroud)

它有效吗?

java hashcode

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

关于数组中缺少元素的问题

我有麻省理工大学的书籍介绍算法第二版的问题

问题是如下

数组A [1..n]包含从0到n的所有整数,除了一个.通过使用辅助数组B [0,很容易在O(n)时间内确定丢失的整数..n]记录哪些数字出现在A.然而,在这个问题中,我们无法通过单个操作访问A中的整个整数.A的元素以二进制表示,我们可以用来访问它们的唯一操作是"获取A [i]的第j位",这需要恒定的时间.

表明如果我们只使用这个操作,我们仍然可以在O(n)时间内确定缺失的整数

请帮忙

algorithm

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

来自随机字母数字字符串的大写随机字符数

我有一些内容未知的随机字符串,众所周知的是内容是字母数字和小写.

我正在寻找一种简单的方法来大写该字符串中随机数字的字符.随机性越高越好.

我可以想到几种方法来做到这一点,但它们似乎都不是最优的.

好的第一个解决方案:

public String randomizeCase(String myString){
  Random rand = new Random();
  StringBuilder build = new StringBuilder();
  for(char c: myString.toCharArray()){
     String s = new String(c);
     if(Character.isLetter(c) && rand.nextBoolean()){
        s = s.toUpperCase();
     } 
     build.append(s);
  }
  return build.toString();
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个解决方案,因为:

  • 每个字符大写的几率为50%,不等于50%的字符大写的几率为50%
  • 有可能没有任何东西得到满足
  • char到字符串转换很难看

java string random

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

为什么程序不继续

以下程序是一个递归程序,用于检查数组中的重复条目.程序编译没有错误,但是在我输入命令行参数并按Enter后,它不会继续.光标只是闪烁!它也不会返回任何运行时错误!如果有人解释为什么会这样,那将非常有帮助!谢谢!:)

import java.io.*;
    class RepeatEntries_Recursive
    {
        static int i=0,flag=0;
        public static void main(String[] args) throws IOException
        {
            int[] inp = new int[6];
            for(int k=0;k<args.length;k++)
                inp[k] = Integer.parseInt(args[k]);
            boolean hasItRepeated = Repeating(inp,i);
            if(hasItRepeated == true)
                System.out.println("\nYes, there are entries that repeat in the array!");
            else
                System.out.println("\nNo, entries don't repeat in the array");
        }
        static boolean Repeating(int[] inp,int i)
        {
            for(int j=0;j<inp.length;j++)
            {
                if(inp[i] == inp[j])
                    flag = 1;
                while(i<inp.length-1)
                    Repeating(inp,i+1);
            }
            if(flag==1)
                return true;
            else
                return false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

java recursion command-line-arguments

0
推荐指数
1
解决办法
71
查看次数