这是一个面试问题.
子类是否继承私有字段?
我回答"否",因为我们无法使用"正常的OOP方式"访问它们.但是访谈者认为它们是继承的,因为我们可以间接访问这些字段或使用反射,它们仍然存在于对象中.
我回来后,在javadoc中找到以下引用:
超级私人会员
子类不继承其父类的私有成员.
你知道面试官的意见吗?
来自J. Bloch
内存泄漏的来源是监听器......确保回调被及时垃圾回收的最佳方法是仅存储对它们的弱引用,例如,通过仅将它们存储为WeakHashMap中的键 .
那么,为什么Java Collections框架中没有任何WeakSet ?
我需要使用mockito使用final方法模拟一些类.我写过这样的东西
@Test
public void test() {
B b = mock(B.class);
doReturn("bar called").when(b).bar();
assertEquals("must be \"overrided\"", "bar called", b.bar());
//bla-bla
}
class B {
public final String bar() {
return "fail";
}
}
Run Code Online (Sandbox Code Playgroud)
但它失败了.我尝试了一些"黑客",它的确有效.
@Test
public void hackTest() {
class NewB extends B {
public String barForTest() {
return bar();
}
}
NewB b = mock(NewB.class);
doReturn("bar called").when(b).barForTest();
assertEquals("must be \"overrided\"", "bar called", b.barForTest());
}
Run Code Online (Sandbox Code Playgroud)
它有效,但"闻起来".
那么,正确的方式在哪里?
谢谢.
您是否使用assert关键字或抛出一些验证运行时异常?它给你带来了什么好处,或者为什么你觉得它不值得使用?
Iterables提供了两种方法getLast
public static <T> T getLast(Iterable<T> iterable);
public static <T> T getLast(Iterable<T> iterable, @Nullable T defaultValue);
Run Code Online (Sandbox Code Playgroud)
但只有一个 getFirst
public static <T> T getFirst(Iterable<T> iterable, @Nullable T defaultValue);
Run Code Online (Sandbox Code Playgroud)
是否存在破坏对称性的设计/实施原因?
我开始学习JAXB,所以我的问题可能非常愚蠢.现在我有类并希望生成XML Schema.遵循这条指令,我得到了例外
IllegalAnnotationExceptions ...没有no-arg默认构造函数.
是啊.我的类没有默认的no-arg构造函数.这太容易了.我有包可见的构造函数/最终方法的类,当然还有参数.我该怎么办 - 创建一些特定的momemto/builder类或者将我的构造函数指定给JAXB(以什么方式?)?谢谢.
我该如何调用父母构造函数?
module C
attr_accessor :c, :cc
def initialization c, cc
@c, @cc = c, cc
end
end
class B
attr_accessor :b, :bb
def initialization b, bb
@b, @bb = b, bb
end
end
class A < B
include C
attr_accessor :a, :aa
def initialization (a, b, c, aa, bb, cc)
#call B::initialization - ?
#call C::initialization - ?
@a, @aa = a, aa
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢.
通过实验,我发现即使在静态上下文中,Java非静态方法也会覆盖范围内所有相同的命名方法.即使不允许参数重载.喜欢
import java.util.Arrays;
import static java.util.Arrays.toString;
public class A {
public static void bar(Object... args) {
Arrays.toString(args);
toString(args); //toString() in java.lang.Object cannot be applied to (java.lang.Object[])
}
}
Run Code Online (Sandbox Code Playgroud)
我在规范中找不到任何相关内容.这是一个错误吗?如果不是,有没有理由实施这样的语言?
UPD:Java 6不编译此示例.问题是 - 为什么?
为什么我可以写
var foo = function(){}();
Run Code Online (Sandbox Code Playgroud)
但不能
function(){}();
Run Code Online (Sandbox Code Playgroud)
有任何设计原因吗?
java ×8
collections ×2
constructor ×2
oop ×2
api-design ×1
assert ×1
creation ×1
exception ×1
guava ×1
hibernate ×1
inheritance ×1
iterable ×1
javascript ×1
jaxb ×1
lombok ×1
mocking ×1
mockito ×1
new-operator ×1
overloading ×1
private ×1
ruby ×1
scope ×1
testing ×1
unit-testing ×1
validation ×1