相关疑难解决方法(0)

什么'私人'在Groovy中意味着什么?

以下代码设置私有方法.那私人真的如何私密?

public class Person {
 private String name
}

def u = new Person(name:"Ron")
println u.name
Run Code Online (Sandbox Code Playgroud)

groovy

20
推荐指数
1
解决办法
8187
查看次数

Groovy相当于没有访问修饰符的java声明

所以,我可以在Groovy中声明一个类:

//groovy-code
class Person {

}
Run Code Online (Sandbox Code Playgroud)

这相当于用java写的东西:

//java-code
public class Person {

}
Run Code Online (Sandbox Code Playgroud)

只是出于好奇..在java中编码的groovy相当于:

//java-code
class Person {

}
Run Code Online (Sandbox Code Playgroud)

我的意思是有没有办法通过声明没有访问修饰符的东西来实现我在Java中可以实现的目标?

java groovy access-modifiers

7
推荐指数
1
解决办法
2317
查看次数

为什么可以毫无问题地在 Spock 中测试私有方法/字段?

package com.example.dev;
public class AClass {
 private Integer a =10;
...//other code
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的 Spock 方法中访问 a 时:

package com.example.dev;
def 'test a'() {
 AClass aClassVar = new AClass()
 aClassVar.a = new Integer(100);
...//other testing stuff
}
Run Code Online (Sandbox Code Playgroud)

它工作正常。为什么会发生这种情况?Spock 是否使用反射来访问私有字段?还是我的封装没写好?

methods unit-testing field private spock

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

仅使用来自 groovy 中另一个类的私有构造函数的类的实例化

我有如下场景,其中有一个World类只有一个私有构造函数和另一个类App

正如代码所示,一个新的实例World可以创建内部App类,尽管只有私有构造的World

在Java中是禁止的,我认为在groovy中也是禁止的,但是App运行没有任何错误。

// World.groovy
class World {
    private World() {
    }
}

// App.groovy
class App {
    static void main(String[] args) {
    def world = new World()
    println world
}
Run Code Online (Sandbox Code Playgroud)

我无法理解在 groovy 中怎么可能。另一个类如何在 groovy 中实例化一个只有私有构造函数的类?

java groovy access-modifiers

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

在Java超类中使用groovy调用私有方法

我有一个MyAbstractClass带私有方法的抽象Java类.有一个具体的实施MyConcreteClass.

public class MyAbstractClass {
    private void somePrivateMethod();
}

public class MyConcreteClass extends MyAbstractClass {
      // implementation details
}
Run Code Online (Sandbox Code Playgroud)

在我的常规测试课中,我有

class MyAbstractClassTest {

    void myTestMethod() {
        MyAbstractClass mac = new MyConcreteClass()
        mac.somePrivateMethod()
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,即somePrivateMethod没有这样的方法签名.我知道groovy可以调用私有方法,但我猜测问题是私有方法是在超类中,而不是MyConcreteClass.有没有办法像这样调用超类中的私有方法(除了使用像PrivateAccessor这样的东西)?

谢谢Jeff

java methods groovy private

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

标签 统计

groovy ×4

java ×3

access-modifiers ×2

methods ×2

private ×2

field ×1

spock ×1

unit-testing ×1