我的程序从外部源获取信息(可以是文件,数据库或我将来可能决定的任何其他内容).
我想定义一个具有我所有数据需求的接口,以及实现它的类(例如,一个用于从文件获取数据的类,另一个用于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代码,或者有一种方法可以执行一次所有项目?
我有一个位于[my svn branch]\build文件夹中的Jenkins文件,它将代码检出到从属节点并构建.
我的多分支项目正确地找到了分支,但它检查了master上的整个svn分支只是为了读取jenkins文件,而不是只检查[my svn branch]\build文件夹的jenkinsfile本身.
由于存储和性能,这是一个主要问题,有什么解决方案吗?
我有一个技术问题迫使我改变我的jenkins主计算机.我拿起硬盘并将其移动到新计算机,但现在主计算机的IP已更改.
主jenkins工作,但从属节点被标记为脱机,当我尝试创建新节点时,安装在节点pc上失败.我注意到创建新节点时出现的错误是连接超时,我看到旧的IP.
我怎样才能解决这个问题?
在Maven多模型中,我们有一个父pom,其中模块在<modules>tag中定义,在每个模块中,我们定义父pom是谁.
为什么这个双向定义?
为什么不在模块的父部分中定义它们之间的关系?
如果模块总是绑定到父模块,我应该如何重用模块?
我有:
SomeClass a = spy(SomeClass.class)
Run Code Online (Sandbox Code Playgroud)
SomeClass有private int myValue。
我想设置myVlaue为3。
我怎样才能使用 Mockito 做到这一点?
(如果 Mockito 不可能,那么我的下一个最佳选择是什么,最好不必放弃使用 Mockito 的代码)。
笔记:
getMyValue(),我已经知道我可以做到这一点。setMyValue(int newMyValue),我不想要。我想创建一个函数,它接收一对(例如[(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)
我该怎么做才能解决这个问题?
鉴于这个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 ×3
jenkins ×3
build ×1
groovy ×1
haskell ×1
jenkins-cli ×1
maven ×1
maven-module ×1
mockito ×1
unit-testing ×1