小编pan*_*ter的帖子

如何使用Karma和Jasmine在角度服务中测试"私有"功能

我在我的角应用程序中有一个服务,看起来像这样:

angular.module('BracketService', []).factory('BracketService', [function() {
    function compareByWeight(a, b) {
        return a.weight - b.weight;
    }
    function filterWeightGroup(competitors, lowWeight, highWeight) {
        //filter stuff
    }
    function createBracketsByWeightGroup(weightGroup) {
        //create some brackets
    }
    //set some base line values
    var SUPER_HEAVY_WEIGHT = 500;
    var SUPER_LIGHT_WEIGHT = 20;
    return {
        //create brackets from a list of competitors
        returnBrackets: function(competitors) {
            var brackets = {};
            //get super light weights
            brackets.superLightWeights = createBracketsByWeightGroup(
                filterWeightGroup(competitors, 0, SUPER_LIGHT_WEIGHT)
                .sort(compareByWeight)
            );
            brackets.superHeavyWeights = createBracketsByWeightGroup(
                filterWeightGroup(competitors, SUPER_HEAVY_WEIGHT, Infinity)
                .sort(compareByWeight)
            );
            brackets.middleWeights = …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing jasmine angularjs angular-services

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

如何从匿名内部类调用特定的父构造函数?

好的,所以我知道匿名内部类要么隐式扩展父类,要么实现接口,因此需要调用超类的构造函数.但是,我不确定如何为匿名类创建构造函数(如果这是可能的)并且没有定义构造函数我不知道如何调用super()!这是我的练习代码:

public class AnonymousConstructor {
    public static void main(String[] args) {
        //I'm not sure how to explicitly call one of the arg super constructors
        MyBob my = new MyBob() {
            //I would like to do something like this super("String"); or      
            //super("String", "String");
        };

    }
}

class MyBob extends Thread {
    MyBob() {
        System.out.println("No arg constructor");
    }
    MyBob(String a) {
        System.out.println("Arg constructor");
    }
    MyBob(String a, String b) {
        System.out.println("2 arg constructor");
    }
    public void run() {
        System.out.println("Outer");
    }
}
Run Code Online (Sandbox Code Playgroud)

我担心的是,如果你试图从一个没有no-arg构造函数的类创建一个匿名类,那么代码将在编译时失败,因为没有办法将参数传递给superconstructor.这是一个有效的问题,如果是这样,有没有办法解决这个问题?

java constructor scjp inner-classes

26
推荐指数
2
解决办法
4756
查看次数

为什么Enums中的静态和实例init块的行为与Classes中的不同

在学习Java认证测试时,我了解到静态初始化块在加载类时按照源代码中的外观顺序运行一次,每次创建实例时运行实例初始化块,并且构造函数中的代码每次运行之后创建一个实例.为了测试我创建了一个带有一些静态和实例初始化块的类以及一个带有打印内容的构造函数.一切都按预期工作 - 除了我认为"加载"意味着只是在运行时,但我想它发生在第一个实例创建时,因为我根本没有得到任何输出,除非我创建至少1个类的实例.然后我用enum尝试了同样的命令并且命令全部关闭.首先,初始化块对枚举在代码中首次引用时枚举所具有的每个值运行一次,其次是在我假设为实例初始化块之后标记为静态的init块!这与我的预期相反.这是我的问题的细分.

  1. 为什么标记为static的init块在枚举中最后运行?
  2. 枚举可以有实例init块吗?
  3. 为什么我认为的块是实例初始化块只在加载枚举时运行一次,而不是每次引用新的枚举值时?
  4. 类"静态"初始化块在"加载"类时运行.加载是什么意思?当一个对象在类中实例化时,它只出现一次吗?

谢谢!这对我来说非常困惑.

public class EnumInit {
public static void main(String[] args) {
    System.out.println(Color.RED.toString() + " Main");
    MyInit myInit = new MyInit();
    System.out.println(Color.BLUE.toString() + " Main");
    MyInit mySecondInit = new MyInit();

}
}

enum Color {    
RED, BLUE, GREEN;
String instanceVar = "Enum Instance Variable Text";
static { System.out.println("Enum Static init block 1"); }
{ System.out.println("Enum Instance init block 1"); }
static { System.out.println("Enum Static static init block 2"); }
Color() { 
    System.out.println(instanceVar);
    System.out.println("Enum String …
Run Code Online (Sandbox Code Playgroud)

java enums scjp initialization open-closed-principle

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

为什么我不能用try/catch子句处理Exception e?

当我编译以下代码时,一切正常,输出正如预期:

class Propogate {
    public static void main(String[] args) {
        Propogate obj = new Propogate();
        try {
            obj.reverse("");
        } catch (IllegalArgumentException e) {
            System.out.println(e);
        } finally {
            System.out.println("That's all folks");
        }
    }
    String reverse(String s) {
        if(s.length() == 00) {
            throw new IllegalArgumentException();
        }
        String reversed = "";
        for(int i=s.length() - 1; i >= 0; --i) {
            reversed += s.charAt(i);
        }
        return reversed;
    }
}
Run Code Online (Sandbox Code Playgroud)

计划结果:

java.lang.IllegalArgumentException
That's all folks
Run Code Online (Sandbox Code Playgroud)

但是,当我运行完全相同的代码但更改异常类型时

IllegalArgumentException to plain old exception all I get is:Propogate.java:14: …
Run Code Online (Sandbox Code Playgroud)

java exception-handling scjp throwable

0
推荐指数
1
解决办法
3719
查看次数

浏览器同步重新加载但CSS不随LESS和Gulp而改变

我正在尝试弄清楚如何结合使用浏览器同步和gulp,以及让浏览器在编译后自动更新较少文件中的更改.我现在得到的是导致系统中出现重新加载的消息"连接到浏览器同步",但我没有看到浏览器发生更改.在禁用缓存的完整手动重新加载中,我看到了预期的更改,因此css/less任务似乎部分工作但我在浏览器同步时遗漏了一些东西.

哦,我在一个主.less文件中使用@import语句来为每个单独的模块提供更少的文件.感谢您的时间和帮助!

gulp.task('less', function(){
return gulp.src(basepath + 'styles/emma.less')
    .pipe(plumber())
    .pipe(sourcemaps.init())
        .pipe(less())
        .pipe(autoprefixer({
            browsers: ['last 2 versions']
        }))
        .pipe(minifyCSS())
    .pipe(sourcemaps.write('./'))
    .pipe(filesize())
    .pipe(gulp.dest( paths.dest + '/css' ))
    .pipe(reload({stream: true}));
});
gulp.task('browser-sync', function() {
    browserSync({
        proxy: 'localhost:8080'
    });
});    
//dev task to compile things on the fly
gulp.task('dev', ['browser-sync'], function(){
    gulp.watch(paths.scripts, ['scripts']);
    gulp.watch(paths.less, ['less']);
    gulp.watch(paths.templates, ['templates']);
});
Run Code Online (Sandbox Code Playgroud)

less gulp browser-sync

0
推荐指数
1
解决办法
3754
查看次数