相关疑难解决方法(0)

Mockito间谍 - 在调用构造函数之前存根

我正在试图窥探一个Object,我想在构造函数调用之前存根一个由构造函数调用的方法.
我的班级看起来像这样:

public class MyClass {
    public MyClass() {
         setup();
    }

    public void setup() {

    }
}
Run Code Online (Sandbox Code Playgroud)

不得调用安装方法.那么,我如何监视这个方法(和存根设置,以便它什么都不做)?
它可以很好地模拟方法,但我想进行单元测试MyClass,所以我需要其他方法.


之所以需要存根设置方法以便它什么都不做:
我正在编写一个乐高机器人(lejos)并且我在设置中放置了一些机器人需要工作的代码.但是,当我在TinyVM(安装在机器人上的VM)之外调用它时,java崩溃,因为VM尚未正确初始化(因为测试在我的PC上运行).对于单元测试,设置并不重要.
我不能存根类/方法设置调用,因为它们中的一些是公共静态最终变量.

java unit-testing mocking mockito spy

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

具有初始化变量的NPE

有人可以向我解释为什么我在getRowCount()方法中得到NullPointerException吗?使用空ArrayList初始化变量...

public class BeschriftungssetTableModel extends DefaultTableModel {

    private static final long serialVersionUID = -4980235976337188354L;

    private List<BeschriftungssetBean> data = new ArrayList<>();


    public void setData(List<BeschriftungssetBean> data) {
        this.data = data;
    }

    @Override
    public int getColumnCount() {
        return 1;
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public Object getValueAt(int row, int column) {
        return data.get(row).getBezeichnung();
    }

    @Override
    public String getColumnName(int column) {
        return "Bezeichnung";
    }

    public static void main(String[] args) {
        BeschriftungssetTableModel beschriftungssetTableModel = new BeschriftungssetTableModel();
        beschriftungssetTableModel.getRowCount();
    }
}



public …
Run Code Online (Sandbox Code Playgroud)

java swing

14
推荐指数
2
解决办法
975
查看次数

如何修复"构造函数调用可覆盖的方法"

我有以下设置,它给我一条消息,指出"构造函数调用Overridable方法".我知道这种情况正在发生,但我的问题是如何修复它以便代码仍然有效并且消息消失了.

public interface Foo{
   void doFoo();
}
public class FooImpl implements Foo{
 @Override{
 public void doFoo(){
    //.. Do important code
 }
}
public class Bar{
  private FooImpl fi;
  public Bar(){
    fi = new FooImpl();
    fi.doFoo(); // The message complains about this line
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

java constructor overriding

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

从ES6中的父类调用子方法

从父类调用子方法是好/坏的做法?

class Parent {
    constructor() {
        // if 'autoPlay' exists (was implemented) in chain
        if (this.autoPlay) {
            this.autoPlay(); // execute from parent
        }
    }
}

class ChildA extends Parent {
    autoPlay() {
        console.log('Child');
    }
}

class ChildB extends Parent {
    // 'autoPlay' wasn't implemented
}

const childA = new ChildA();
const childB = new ChildB();
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

13
推荐指数
2
解决办法
6341
查看次数

当Base类构造函数在Java中调用重写方法时,Derived类对象的状态

请参考下面的Java代码:

class Base{
     Base(){
         System.out.println("Base Constructor");
         method();
     }
     void method(){}    
}

class Derived extends Base{
    int var = 2;
    Derived(){
         System.out.println("Derived Constructor");  
    }

     @Override
     void method(){
        System.out.println("var = "+var);
     }
 }

class Test2{
    public static void main(String[] args) {
        Derived b = new Derived();
    }
}
Run Code Online (Sandbox Code Playgroud)

看到的输出是:

Base Constructor
var = 0
Derived Constructor
Run Code Online (Sandbox Code Playgroud)

我认为var = 0的发生是因为Derived对象是半初始化的; 类似于Jon Skeet在这里所说的

我的问题是:

如果尚未创建Derived类对象,为什么会调用重写的方法?

在什么时间点,var赋值为0?

是否存在需要此类行为的用例?

java inheritance constructor

12
推荐指数
2
解决办法
4097
查看次数

从Java中的子类构造函数调用超类

我试图创建一个构造函数,将一个字段作为参数,然后将其放在一个存储在超类中的字段中.这是我正在使用的代码

public crisps(String flavour, int quantity) {
    this.flavour = super.getFlavour();
    this.quantity = quantity;
}
Run Code Online (Sandbox Code Playgroud)

在超类中,我用字段初始化了字段

private String flavour;
Run Code Online (Sandbox Code Playgroud)

我有一个访问方法

public String getFlavour() {
    return flavour;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误" 风味在超类中有私人访问权限 ",但我相信这应该无关紧要,因为我调用了将其返回到字段的访问器方法?

java subclass accessor superclass

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

构造函数结束后调用方法

我需要在构造函数结束后调用一个方法,我不知道该怎么做.我有这门课:

Class A {
    public A() {
        //...
    }

    public void init() {
        //Call after the constructor
    }
}
Run Code Online (Sandbox Code Playgroud)

java

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

如果在setter / getter中创建

Java相当新,希望在使用setter / getters并使用toString方法创建输出时存储乘客详细信息方面有所帮助。

The problem I have is, say I am storing the passengers phone number and don't want their phone number to contain any characters, have a length of 10 numbers and start with 1 and return "Not Valid" if one of these occur.

I have tried to create if statements in the setter but it is not returning the "Not Valid". This is what I have so far

public class Passenger {

    private String name;
    private String location; …
Run Code Online (Sandbox Code Playgroud)

java getter-setter

12
推荐指数
1
解决办法
348
查看次数

在Java中,为什么我不能在父类中声明最终成员(没有初始化它)并在子类中设置它的值?我该如何解决?

在Java程序中,我有多个继承自父类的子类(它是抽象的).我想表达的是,每个孩子都应该有一个只设置一次的成员(我打算从构造函数中做到这一点).我的计划是编码s.th. 像这样:

public abstract class Parent {
    protected final String birthmark;
}

public class Child extends Parent {
    public Child(String s) {
        this.birthmark = s;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不能取悦Java神.在父类中,我收到birthmark"可能尚未初始化" 的消息,在子类中我得到" birthmark无法访问最终字段".

那么Java的方式是什么呢?我错过了什么?

java final

10
推荐指数
2
解决办法
3636
查看次数

在抽象类的构造函数中使用抽象的init()函数

我有这样的事情:

    public abstract class Menu {
     public Menu() {
      init();
     }

     protected abstract void init();

     protected void addMenuItem(MenuItem menuItem) {
      // some code...
     }
    }

    public class ConcreteMenu extends Menu {
     protected void init() {
      addMenuItem(new MenuItem("ITEM1"));
      addMenuItem(new MenuItem("ITEM2"));
      // ....
     }
    }

//Somewhere in code
Menu menu1 = new ConcreteMenu();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,超类的init方法是抽象的,并且在创建对象后由构造函数自动调用.

我很好奇我是否可以遇到像这样的代码的某些问题,当我需要创建一些这样的结构时,其结构不会及时更改.

会有更好的方法吗?它适用于Java,但它可以在C++和ActionScript中使用吗?

谢谢你的答案.

java

10
推荐指数
1
解决办法
5202
查看次数