小编Pat*_*Huy的帖子

我可以在java中使用方法链接而不执行不安全操作的抽象构建器类吗?

我正在尝试为一些构建器类创建一个抽象基类,这样我就可以轻松地在Builder实现之间重用代码.我希望我的构建器支持方法链接,因此方法必须返回最具体类型的"this"实例.我想我可以用泛型来做这件事.不幸的是,如果不使用不安全的操作,我就无法做到这一点.可能吗?

下面是我如何尝试它(以及它如何工作)的示例代码.我想避免在"foo()"中投射到T(导致未经检查的警告),这可以做到吗?

public class Builders
{
   public static void main( final String[] args )
   {
      new TheBuilder().foo().bar().build();
   }
}


abstract class AbstractBuilder<T extends AbstractBuilder<?>>
{
   public T foo()
   {
      // set some property
      return (T) this;
   }
}


class TheBuilder extends AbstractBuilder<TheBuilder>
{
   public TheBuilder bar()
   {
      // set some other property
      return this;
   }

   public Object build()
   {
      return new Object();
   }
}
Run Code Online (Sandbox Code Playgroud)

java generics fluent-interface builder

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

获取sass/compass中的文件列表

我正在使用sass和指南针,我正在尝试为匹配给定模式的图像创建css类.预期/结果css大多如下:

.class1 { background-image: url(class1.png); }
.class2 { background-image: url(class2.png); }
Run Code Online (Sandbox Code Playgroud)

尽管可能使用指南针精灵功能(http://compass-style.org/help/tutorials/spriting/),但在我的情况下它是不方便的(因为它会生成新文件)因为图像已经是spritesheets本身.

所以能够做类似的事情

@each $clazz in listFiles("images/*") {
  .#{$clazz} {
    background-image: url('#{$clazz}.png');
  }
}
Run Code Online (Sandbox Code Playgroud)

会很好.有没有或多或少的简单方法呢?

sass compass-sass

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

如何确定性地构建 Docker 镜像?

我正在尝试构建 Docker 映像,并且希望我的 Docker 映像具有确定性。令我惊讶的是,我发现即使是一个简单的 Dockerfile,例如

FROM scratch
ENV a b
Run Code Online (Sandbox Code Playgroud)

重复使用时生成不同的 IDdocker build --no-cache .

如何使我的构建具有确定性以及导致图像 ID 发生变化的原因是什么?启用缓存后,会生成相同的 ID。

我试图获得这种可重复性的原因是为了能够在分布式构建环境中生成相同的层。我无法控制构建的运行位置,因此我无法知道缓存中的内容。另外,Docker 构建使用 wget 从 ftp 下载文件,这些文件可能已更改,也可能未更改,目前我无法轻松地从 Dockerfile 中告诉 Docker a 的结果是否RUN应使缓存无效。因此,如果我可以为相同的层生成相同的 ID(当不使用缓存时),这些层就不必再次“推”和“拉”。

还有这里列出的所有原因:https ://reproducible-builds.org/

docker

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

如何完全填充Ebean实体?

我正在使用Play框架,我正在尝试从我的scala代码访问Ebean实体的属性(定义为公共字段并由Play框架增强).

从游戏文档中我了解到了这一点

(2)直接Ebean字段访问(启用延迟加载)的增强仅适用于Java类,而不适用于Scala.因此,Scala源文件(包括标准Play模板)的直接字段访问不会调用延迟加载,通常会导致空(未填充)实体字段.要确保填充字段,可以(a)手动创建getter/setter并改为调用它们,或者(b)确保在访问字段之前完全填充实体.

那我该如何做(b)?我可以在调用scala之前从我的Java访问属性但是有更好/更简单的方法吗?

java scala ebean playframework-2.0

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