小编Gil*_*ian的帖子

Java - 委托方法的正确方法

我的程序从外部源获取信息(可以是文件,数据库或我将来可能决定的任何其他内容).

我想定义一个具有我所有数据需求的接口,以及实现它的类(例如,一个用于从文件获取数据的类,另一个用于DB的数据等).

我希望我的项目的其余部分不关心数据的来源,也不需要创建任何对象来获取数据,例如调用"DataSource.getSomething();"

为此,我需要DataSource包含接口类型的变量,并使用其中一个具体实现对其进行初始化,并将其所有方法(来自接口)公开为静态方法.

因此,假设接口名称为K,具体实现为A,B,C.

我今天这样做的方式是:

public class DataSource  {
    private static K myVar = new B();

    // For **every** method in K I do something like this:

    public static String getSomething() {
          return myVar.doSomething();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

这是非常糟糕的,因为我需要复制接口的所有方法并使它们静态,因此我可以将它委托给myVar,以及许多其他明显的原因.

这样做的正确方法是什么?(也许它有一个设计模式?)

**注意 - 因为这将是许多其他项目的支柱,我将使用来自数千(如果不是数万)代码行的这些调用,我坚持像"DataSource.getSomething();"那样保持简单,我不要像"DataSource.getInstance().getSomething();"**

编辑:我在这里提供使用像Guice这样的DI框架,这是否意味着我需要在我的所有项目中的每个入口点(即"主"方法)中添加DI代码,或者有一种方法可以执行一次所有项目?

java design-patterns software-design

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

jenkins multibranch jenkinsfile SVN结账

我有一个位于[my svn branch]\build文件夹中的Jenkins文件,它将代码检出到从属节点并构建.

我的多分支项目正确地找到了分支,但它检查了master上的整个svn分支只是为了读取jenkins文件,而不是只检查[my svn branch]\build文件夹的jenkinsfile本身.

由于存储和性能,这是一个主要问题,有什么解决方案吗?

jenkins jenkins-pipeline multibranch-pipeline

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

詹金斯 - 改变主人的IP

我有一个技术问题迫使我改变我的jenkins主计算机.我拿起硬盘并将其移动到新计算机,但现在主计算机的IP已更改.

主jenkins工作,但从属节点被标记为脱机,当我尝试创建新节点时,安装在节点pc上失败.我注意到创建新节点时出现的错误是连接超时,我看到旧的IP.

我怎样才能解决这个问题?

build jenkins jenkins-cli

4
推荐指数
2
解决办法
7810
查看次数

正确使用多模块maven项目的方法

在Maven多模型中,我们有一个父pom,其中模块在<modules>tag中定义,在每个模块中,我们定义父pom是谁.

为什么这个双向定义?
为什么不在模块的父部分中定义它们之间的关系?
如果模块总是绑定到父模块,我应该如何重用模块?

java maven maven-module

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

使用mockito设置变量值

我有:

    SomeClass a = spy(SomeClass.class)
Run Code Online (Sandbox Code Playgroud)

SomeClassprivate int myValue

我想设置myVlaue为3。

我怎样才能使用 Mockito 做到这一点?

(如果 Mockito 不可能,那么我的下一个最佳选择是什么,最好不必放弃使用 Mockito 的代码)。

笔记:

  • 不建议嘲笑getMyValue(),我已经知道我可以做到这一点。
  • 不建议添加setMyValue(int newMyValue),我不想要。

unit-testing mockito

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

我如何在haskell中返回null?

我想创建一个函数,它接收一对(例如[(3,'a'),(7,'d'),(1,'c')])和一个键(例如3)的列表,并返回该键的值(在本例中'a').

如果密钥存在,我写的函数工作正常,但如果我null没有找到匹配的密钥,我会尝试返回- 我收到错误.

功能是:

lookup1 k lst = lookupH1 k lst
    where
        lookupH1 k lst 
            | ((length lst) == 0) = null   -- this is the problematic line
            | ((fst (head lst)) == k )= snd (head lst)
            | otherwise = lookupH1 k (tail (lst))
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?

haskell

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

jenkins 2.0 pipline println无法正常工作

鉴于这个FirstScript.groovy:

class FirstScript implements Serializable{
    def firstFunction() {
        println "This print doesn't work"
        return "This string can be returned and printed"
    }
}

return new FirstScript()
Run Code Online (Sandbox Code Playgroud)

这个pipline代码:

node("Slave") {
    checkout scm
    def firstScript = load 'FirstScript.groovy'
    echo firstScript.firstFunction()
}
Run Code Online (Sandbox Code Playgroud)

唯一的输出是"可以返回并打印此字符串".

这显然是因为println发生在slave的输出流而不是master的输出流上,但我需要一种方法来连续打印从slave到master的控制台日志.尝试将System.out从master传递到slave,没有任何效果.

有什么建议?

java groovy jenkins jenkins-pipeline

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