小编Rad*_*ium的帖子

Java eclipse中调用者的条件断点

我试图在Eclipse调试器的Java程序中使用watchpoint跟踪值的更改.类层次结构非常复杂,我跟踪的值包含在容器中,容器在很多地方使用.

更具体地说,有一个容器SizeRequirement,它有一个属性minimum,我正在跟踪.许多组件的许多布局管理器都使用此类来定义组件大小的要求.我需要捕获完全调用,其中值更改/设置为一个特定的布局管理器和其中的一个特定组件.是否可以通过调用者过滤断点?我将尝试使用一些抽象代码来解释问题:

class ValueContainer {
  public String value;
}

class A {

  private ValueContainer valueContainer;

  public A () {
    valueContainer = new ValueContainer();
    valueContainer.value = "setByA";
  }

}

class B {

  private ValueContainer valueContainer;

  public B () {
    valueContainer = new ValueContainer();
    valueContainer.value = "setByB";
  }

}
Run Code Online (Sandbox Code Playgroud)

我设置了一个观察点value,我只希望断点只有在value由A类设置并且忽略B的调用时才挂起.

更糟糕的是,类SizeRequirement是swing库的一部分,并且深深地集成在代码中,因此我无法使用继承来替换某些孩子在我想跟踪它的某个确切位置.

编辑

所以这就是我用作条件断点条件的东西.信不信由你,它的确有效.:)

    StackTraceElement[] arr = Thread.currentThread().getStackTrace();
    boolean contains = false;
    for(StackTraceElement e : arr) {
        if (e.getClassName().contains("A")) {
            contains = true; …
Run Code Online (Sandbox Code Playgroud)

java eclipse debugging watchpoint conditional-statements

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

在继承的类中具体化数据类型

说我有以下代码示例.我有DataFiller的接口和它的2个实现.每个实现都采用不同类型的容器.

    public interface DataFiller {
        public void fillContainer(Object param1, Object param2 Object container);
    }

    public class InOrderDataFiller implements DataFiller {
        @Override
        public void fillContainer(Object param1, Object param2, Object container) {
            if (container instanceof InOrderContainer) {
                container.setContent1(param1);
                container.setContent2(param2);
            }
        }
    }

    public class ReverseDataFiller implements DataFiller {
        @Override
        public void fillContainer(Object param1, Object param2, Object container) {
            if (container instanceof ReverseContainer) {
                container.setContent1(param2);
                container.setContent2(param1);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

为了确保我可以填充它们,我需要使用instanceof检查容器的数据类型.我想知道,如果有办法,如何有更优雅的代码,比如静态类型检查.有没有办法,如何在DataFiller的具体实现中指定容器的数据类型?我希望代码更像这样(当然这不会编译):

    public interface DataFiller {
        public void fillContainer(Object param1, Object param2 Container container);
    } …
Run Code Online (Sandbox Code Playgroud)

java polymorphism inheritance interface

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

成员方法在全班同步

经过一番快速搜索,我无法找到明确的答案.

是否有一些更优雅的方法来同步整个类的整个成员方法(绑定在实例上)?这意味着可以通过多个线程在多个实例上调用方法,但是当时只能由一个线程调用.它也可以写为同步块.

(例如,该方法将其实例插入共享缓存中.)

class DataObject {

  public putInCache() {
    synchronized(getClass()) {

      // ... do some stuff
      cache.insert(this);
      // ... do some more stuff

    }
  }

}
Run Code Online (Sandbox Code Playgroud)

java synchronized

0
推荐指数
2
解决办法
305
查看次数