小编Xin*_*hao的帖子

如何完成CompletableFuture <Void>?

我想要一个仅表示完成的CompletableFuture(例如,我没有返回值).

我可以将CompletableFuture实例化为:

CompletableFuture<Void> future = new CompletableFuture<> ();
Run Code Online (Sandbox Code Playgroud)

但是我应该为完整的方法提供什么?例如,我做不到

future.complete(new Void());
Run Code Online (Sandbox Code Playgroud)

java completable-future

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

泛型是否绑定了Java中方法签名的一部分?

我今天意识到这个编译并运行良好:

public class Test {
    public static <T> T handle(T val) {
        System.out.println("T");
        return val;
    }

    public static <T extends String> T handle(T val) {
        System.out.println("T extends String");
        return val;
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个handle方法具有相同的名称,并且?参数的数量和类型()相同.唯一的区别是第二种handle方法具有更严格的通用界限.IDE根本没有抱怨,代码编译得很好.在运行时方法按预期选择 - 例如,Test.handle("this is a string")将调用第二个方法Test.handle(10)并将调用第一个方法.

泛型绑定是否被认为是方法签名的一部分?或者它是一种方法重载决议魔术?

java generics overload-resolution

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

Jib:如何在不安装的情况下使用 amazon-ecr-credential-helper?

当使用jib-gradle-plugin构建并推送到 AWS ECR 时,它要求我安装aws ecr 凭证助手,否则构建会抱怨“系统没有 docker-credential-ecr-login CLI”

我想知道是否有一种方法可以在不安装凭证助手的情况下推送到 AWS ECR,或者是否可以在存储库中捆绑凭证助手的便携式版本?

安装助手的问题是:

  1. 它需要在需要构建项目的每台机器上安装助手,因此使得构建流程不像我希望的那样自动化
  2. 要安装 aws ecr 凭证帮助程序,需要安装 Docker。这感觉有点讽刺,因为 Jib 的很大一部分要点是构建发生的主机上不需要 Docker,因此构建可以是独立的和可移植的。

我知道这不是 Jib 问题,但我只是希望使用 Jib 的人可能遇到类似的挑战,因此可以提供一些有关如何解决该问题的见解。

gradle docker amazon-ecr jib aws-credentials

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

如果为C#编译器分配了属性,它是否会删除未使用的本地?

这可能是一个愚蠢的问题.我知道编译器将删除未使用的本地.但是,如果我像这样写我的代码:

class MyClass
{
    public int SomeProperty
    {
        get
        {
          ...
        }
    }

    public void SomeFunction ()
    {
       //will this line be removed if i is never used?
       int i = SomeProperty;
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道如果i由于优化将被编译器删除.SomeProperty我希望执行的getter中有逻辑.如果i将被删除,我必须更改SomeProperty为一个功能.

顺便问一下,有没有办法知道哪一行会被编译器优化?

c# compiler-construction optimization

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

通用方法与非通用方法之间的C#重载解析

我在Internet和stackoverflow上进行了一些基本搜索,当涉及通用版本方法和非通用版本方法时,我看到了很多有关重载解析的讨论。我知道重载再分解是在编译时完成的-因此,如果我有以下代码:

public class A<T>
{
    public void DoStuff(T value)
    {
         InternalDoStuff(value);
    }

    protected void InternalDoStuff(int value)
    {
         Console.WriteLine("Non-generic version");
    }

    protected void InternalDoStuff(T value)
    {
         Console.WriteLine("Generic version");
    }

}

public class Test
{
    static void Main (string [] args)
    {
         A<int> a = new A<int> ();
         a.DoStuff(100);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出将是“通用版本”,因为编译器已经选择了“ InternalDoStuff”的分辨率,并且编译器看到的是“在DoStuff中使用T类型参数调用了InternalDoStuff”。

但是我不知道这是否会有所作为:

public class B : A <int> 
{

}

public class Test
{
    static void Main (string [] args)
    {
         B b = new B ();
         b.DoStuff(100);
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# generics overload-resolution

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

Java无法从盒装类型转换为基本类型

我试图使用Class.cast()将盒装Double转换为原始double:

Object d = 1.0d;
Class<?> clazz = double.class;
//the bellow line throws java.lang.ClassCastException: 
//Cannot cast java.lang.Double to double
clazz.cast(d);
Run Code Online (Sandbox Code Playgroud)

我这样做是因为在我的代码的某些部分,动态地给出了一个值对象和一个类,并且我确实保证值对象是兼容类型.但是这个例外让我很困惑.使用cast()的合同是什么?

更新我遇到了这个,因为我们的代码如下:

interface Provider <T> {
  T get ();
  Class<T> getClazz();
}

//a special handling for double primitive
class DoubleProvider implements Provider<Double> {

  public double getDouble(){
      return 1.0d;
  }

  @Override
  public Double get() {
    return getDouble();
  }

  @Override
  public Class<Double> getClazz() {
    //why this actually compiles?
    return double.class;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果double和Double是如此不同以至于它们都不被认为是可分配的,为什么java允许DoubleProvider中的getClazz()方法进行编译?double.class和Double.class之间的关系是什么?

java

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