Java 如何在IntelliJ的调试器中查看此变量?
我试图研究ValidationBuilder实例的结构,使用方式如下:Java 如何在IntelliJ的调试器中查看此变量?,java,debugging,generics,intellij-idea,Java,Debugging,Generics,Intellij Idea,我试图研究ValidationBuilder实例的结构,使用方式如下: validationBuilder = validationBuilder.add( !(dateEnd != null && !ad.endDate().equals(dateEnd) && dateEnd.compareTo(dateBegin) <= 0), " End date must be after start date."); 现在,这里是反编译的.cl
validationBuilder = validationBuilder.add(
!(dateEnd != null && !ad.endDate().equals(dateEnd) && dateEnd.compareTo(dateBegin) <= 0),
" End date must be after start date.");
现在,这里是反编译的.class文件的一部分。省略了导入、复制构造函数和生成方法
public class ValidationBuilder<T> {
private final Validation<Array<String>, T> validation;
public static <T> ValidationBuilder<T> from(T testObject) {
return new ValidationBuilder(testObject);
}
// ...
public ValidationBuilder<T> add(boolean testSucceeded, String error) {
if (testSucceeded) {
return this;
} else {
Validation<Array<String>, T> invalid = (Validation)this.validation.fold((errors) -> {
return Validation.invalid(errors.append(error));
}, (testObject) -> {
return Validation.invalid(Array.of(error));
});
return new ValidationBuilder(invalid);
}
}
}
省略了很多。我觉得我错过了这里发生的事情:
Validation<Array<String>, T> invalid = (Validation)this.validation.fold((errors) -> {
return Validation.invalid(errors.append(error));
}, (testObject) -> {
return Validation.invalid(Array.of(error));
});
<>我来自C++,新到java,还有像lambda这样的更新的特性。错误数据来自何处,我如何在调试器的变量列表中看到它,或者为什么我看不到它们?这里使用的ValidationBuilder实例是cglib生成的代理。它是由创建的,所以我猜您正在调试一个测试
Mockito代理没有您通常期望在ValidationBuilder中的状态,相反,它有一种您通过设置期望来“给予”它的状态。事实上,我看不到我要查找的字段,因为我认为正在添加验证,但没有添加验证,因此,底层结构基于名为Valid而不是Invalid的内容。正确触发验证后,我看到:
Mockito确实在模拟adRequest实例,但这与该模拟实例周围的验证无关。这里使用的ValidationBuilder实例是cglib生成的代理。它是由创建的,所以我猜您正在调试一个测试?Mockito代理没有您通常期望在ValidationBuilder中的状态,相反,它有一种您通过设置期望来“给予”它的状态。啊!我想知道莫基托是否与此事有关。请随意发表您的评论作为回答。谢谢。你能发布你正在调试的示例代码吗?具体来说,validationBuilder是如何声明和初始化的?
public interface Validation<E, T> extends Value<T> {
static <E, T> Validation<E, T> valid(T value) {
return new Validation.Valid(value);
}
static <E, T> Validation<E, T> invalid(E error) {
Objects.requireNonNull(error, "error is null");
return new Validation.Invalid(error);
}
static <E, T> Validation<E, T> fromEither(Either<E, T> either) {
Objects.requireNonNull(either, "either is null");
return either.isRight() ? valid(either.get()) : invalid(either.getLeft());
}
static <E, T> Validation<List<E>, Seq<T>> sequence(Iterable<? extends Validation<List<E>, T>> values) {
Objects.requireNonNull(values, "values is null");
List<E> errors = List.empty();
List<T> list = List.empty();
Iterator var3 = values.iterator();
while(var3.hasNext()) {
Validation<List<E>, T> value = (Validation)var3.next();
if (value.isInvalid()) {
errors = errors.prependAll(((List)value.getError()).reverse());
} else if (errors.isEmpty()) {
list = list.prepend(value.get());
}
}
return errors.isEmpty() ? valid(list.reverse()) : invalid(errors.reverse());
}
static <E, T> Validation<E, T> narrow(Validation<? extends E, ? extends T> validation) {
return validation;
}
// ...
default boolean isEmpty() {
return this.isInvalid();
}
T get();
E getError();
default Either<E, T> toEither() {
return this.isValid() ? Either.right(this.get()) : Either.left(this.getError());
}
boolean equals(Object var1);
int hashCode();
String toString();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action, "action is null");
if (this.isValid()) {
action.accept(this.get());
}
}
// ...
Validation<Array<String>, T> invalid = (Validation)this.validation.fold((errors) -> {
return Validation.invalid(errors.append(error));
}, (testObject) -> {
return Validation.invalid(Array.of(error));
});