小编you*_*uri的帖子

Java 8默认方法作为特征:安全吗?

在Java 8中使用默认方法作为穷人的特征是一种安全的做法吗?

一些人声称如果你只是为了它而使用它们可能会让熊猫感到悲伤,因为它很酷,但这不是我的意图.还经常提醒的是,引入了默认方法来支持API演变和向后兼容性,这是事实,但这并不会使它们错误或扭曲以将它们用作特征本身.

我有以下实际用例:

public interface Loggable {
    default Logger logger() {
        return LoggerFactory.getLogger(this.getClass());
    }
}
Run Code Online (Sandbox Code Playgroud)

或许,定义一个PeriodTrait:

public interface PeriodeTrait {
    Date getStartDate();
    Date getEndDate();
    default isValid(Date atDate) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

无可否认,可以使用组合(甚至是辅助类),但它看起来更冗长,更混乱,并且不允许从多态性中受益.

那么,使用默认方法作为基本特征是否可行/安全,还是应该担心不可预见的副作用?

关于SO的几个问题与Java vs Scala特征有关; 这不是重点.我也不仅仅是在征求意见.相反,我正在寻找一个权威的答案或至少是现场洞察力:如果你在公司项目中使用默认方法作为特征,那么它是否真的是一个时间炸弹?

java traits java-8 default-method

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

git push local branch与remote tag同名

我正在尝试将新的本地分支推product-0.2送到远程,其中已经存在具有相同名称的标记(但分支本身不存在)

git push -v --tags --set-upstream origin product-0.2:product-0.2 
Pushing to https://****@github.com/mycompany/product.git
error: src refspec product-0.2 matches more than one.
error: failed to push some refs to 'https://****@github.com/mycompany/product.git'
Run Code Online (Sandbox Code Playgroud)

与:相同:

git push origin product-0.2:/refs/heads/product-0.2 
Run Code Online (Sandbox Code Playgroud)

虽然相反的方式有效,例如创建一个分支product-0.1,然后提交它然后应用标记product-0.1.

有些人通过在本地删除冲突标记,然后推送分支,然后检索远程标记来解决这个问题,但它看起来很麻烦且容易出错.

如何以最小的麻烦创建我的分支?

感谢您的输入

git git-branch

96
推荐指数
6
解决办法
6万
查看次数

模拟组件中的服务 - 模拟被忽略

这次我试图模拟一个服务(做http调用)来测试一个组件.

@Component({
  selector: 'ub-funding-plan',
  templateUrl: './funding-plan.component.html',
  styleUrls: ['./funding-plan.component.css'],
  providers: [FundingPlanService]
})
export class FundingPlanComponent implements OnInit {
  constructor(private fundingPlanService: FundingPlanService) {
  }

  ngOnInit() {
    this.reloadFundingPlans();
  }

  reloadFundingPlans() {
    this.fundingPlanService.getFundingPlans().subscribe((fundingPlans: FundingPlan[]) => {
      this.fundingPlans = fundingPlans;
    }, (error) => {
      console.log(error);
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

文件(2.0.0版本)解释说,你应该嘲笑的服务.使用相同的TestBed配置:

describe('Component: FundingPlan', () => {
  class FundingPlanServiceMock {
    getFundingPlans(): Observable<FundingPlan> { return Observable.of(testFundingPlans) }
  }

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [FundingPlanComponent],
      providers: [
        { provide: FundingPlanService, useClass: FundingPlanServiceMock },
      ]
    });

    fixture …
Run Code Online (Sandbox Code Playgroud)

service mocking angular2-testing angular

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

使用 python 将图像上传到 azure blob 存储

我有一个名为的图像目录images,其中包含图像文件:

images
    --0001.png
    --0002.jpg
    --0003.png
Run Code Online (Sandbox Code Playgroud)

现在我想将此目录上传到我的 azure blob 存储,并具有相同的文件结构。我查看了此处此处给出的示例代码,但是:

  1. 即使安装后azure-blob-storage,该软件包中也没有这样的东西BlobService
  2. 有没有地方清楚地记录了如何执行此操作?

python azure azure-storage azure-blob-storage

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

Java项目变得太大了

我们有一个庞大的Java 8 Spring Hibernate Maven项目.

问题 :

  • 最多建设时间为10-12分钟; 没有测试3分钟
  • 我们已经有一个命令行开关来跳过很少修改的模块,这是构建过程达到实际限制的症状
  • Eclipse正在努力管理项目(尽管IntelliJ现在还可以)
  • 随着项目的发展,事情变得越来越严重,并且测试团队的更多场景在代码库中被纳入集成测试.

我们现在的工作方式

  • 该项目在大约20个Maven模块中配置,如下所示:
    Parent
    |--- Tier1
    |--- Tier2
    |--- WebTier
         |---- ModuleA
         |---- ModuleB
         |---- ModuleC
         |---- ...
         |---- Entities
         |---- Shared
         |---- Batch
         |---- IntegrationTests
  • 该应用程序构建为单个WAR
  • 开发人员将单个层(通常WebTier)作为人工制品从Eclipse或IntelliJ 部署到其本地Tomcat
  • 尽管该项目在模块中看起来很好,但它们之间存在许多不希望的耦合点.特别是Shared在需要"跨模块"访问的模块放置其服务的地方
  • 所有集成测试都在一个专用模块中(不知道为什么)

让它变得更好的想法

  • 添加MessageBroker模块以允许相关的松耦合.也许是JMS,或者只是一个用于同步通信的哑内存组件
  • 摆脱Shared模块
  • 确保模块具有粗粒度的入口点
  • 删除兄弟姐妹之间不需要的耦合,并在可能的情况下更喜欢消息代理
  • 可以保持Entities.至少核心业务实体(Customer,CustomerFile,...).但是一些实体显然属于单个模块(批处理执行信息将在Batch模块中)

这样,任何进行更改的人在ModuleA大多数情况下只会在该模块中构建和运行测试,而不必担心破坏应用程序.

问题

  • 这看起来像个好计划吗?好的,我的意思是面向未来,有很好的改善机会的机会,并且在这种情况下不需要过多的工作
  • 我们应该每层有1个Eclipse/IJ项目,让IDE构建人工制品并将其部署到Tomcat,还是每个模块都有1个项目,以及对Nexus的依赖?或者后一种选择可能是矫枉过正?
  • 还有其他建议吗?

一些指标

  • Windows 7,Java 8,Maven 3.0.3,TestNG.
  • SSD或7200rpm硬盘(影响有限)
  • 6Gb RAM
  • 堆1Gb(maven)
  • CI与詹金斯

谢谢你!

java ide build-process maven

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

Grails Spock单元测试需要模拟事务管理器

在Grails 3.1.12中,我想对服务进行单元测试:

@Transactional
class PlanService {
    List<Plan> getPlans(Map params) {
        def currentUser = (User)springSecurityService.getCurrentUser()
        return Plan.findAllByCompany(currentUser.employer, params)
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样:

@TestFor(PlanService)
@Mock([Plan, User, Company])
class PlanServiceSpec extends Specification {
    void "Retrieve plan from the current user"() {
        setup:
        // create and save entities here

        when: "the plans are retrieved"
        def params = null
        def plans = service.getPlans(params)

        then: "the result should only include plans associated to the current user's company"
        plans.size() == 2
}
Run Code Online (Sandbox Code Playgroud)

从控制台运行测试:

grails> test-app my.PlanServiceSpec -unit
Run Code Online (Sandbox Code Playgroud)

失败: …

service grails unit-testing mocking spock

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

为什么 53280 $D020 的高位总是被置位 (c64)

至少运行 VICE 2.4:

PRINT PEEK(53280)
 254

POKE 53280,14

PRINT PEEK(53280)
 254
Run Code Online (Sandbox Code Playgroud)

很明显,只使用了位#0-#3,并且使用 获得了“正确”值AND 15,但是为什么6510 将高位设置为1

c64 commodore

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