假设我有三个班级:
class A {
A() {
// super();
System.out.println("class A");
}
}
class B extends A {
B() {
// super();
System.out.println("class B");
}
}
class C extends B {
public static void main(String args[]) {
C c = new C(); //Parent constructor will get called
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个C类实例时,它会调用超类的构造函数.那么,是否有多个对象被创建?如果只创建了一个对象,那么super()和另一个类的构造函数如何?super()方法是否在内部创建了一个对象?我所知道的是,构造函数也是一种方法(我可能错了).
我的问题是:
我正在使用使用Servlet 2.5的Tomcat 6.ServletRequestAPI 中的Servlet 3.0中提供了一种方法,该方法为ServletContext与之关联的对象提供了句柄ServletRequest.有没有办法ServletContext从ServletRequest使用Servlet 2.5 API 获取对象?
我打算序列化和反序列化其键是字符串的hashmap.
从Josh Bloch的Effective Java,我理解以下内容.第222页
例如,考虑哈希表的情况.物理表示是包含键值条目的一系列散列桶.放入条目的哪个桶是密钥的哈希码的函数,通常保证从JVM实现到JVM实现不相同.事实上,从运行到同一JVM实现运行甚至不保证是相同的.因此,接受哈希表的默认序列化表单将构成严重错误.序列化和反序列化哈希表可能会产生一个不变量严重损坏的对象.
我的问题是:1)一般来说,覆盖地图的关键类的等于和哈希码会解决这个问题并且地图可以正确恢复吗?
2)如果我的键是一个String并且String类已经覆盖了hashCode()方法,我是否还会遇到上述问题.(我看到一个错误,让我觉得这可能仍然是一个问题,即使键是重写hashCode的String.)
3)以前,我通过序列化一系列条目(键,值)解决了这个问题,并且在反序列化时我会重建地图.我想知道是否有更好的方法.
4)如果问题1和2的答案仍然无法保证,有人可以解释原因吗?如果hashCodes是相同的,他们会跨JVM转到相同的存储区吗?
谢谢,格雷斯
我试图使用API调用JUnit测试套件.我知道您可以使用以下方法来配置测试类:
@RunWith(Suite.class)
@Suite.SuiteClasses({
Test1.class,
Test2.class, ...
})
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法使用Java API触发整个套件,例如使用JUnitCore?
例如,您可以使用以下代码触发测试:
Runner r =
try {
r = new BlockJUnit4ClassRunner(Class.forName(testClass));
} catch (ClassNotFoundException | InitializationError e) {
// handle
}
JUnitCore c = new JUnitCore();
c.run(Request.runner(r));
Run Code Online (Sandbox Code Playgroud)
更新:
从API,似乎Suite类本身是一个跑步者,因此以下代码似乎工作:
Suite suite = new Suite(klass, new RunnerBuilder() {
... // Implement methods
});
JUnitCore c = new JUnitCore();
c.run(Request.runner(suite));
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否是推荐的方法,或者如果编写上述代码有任何缺点.
我有一个POJO指定为:MyClass<U>,其中U是泛型类型参数.我正在尝试编写一个实用程序方法,它接受类引用Class<T>并填充类型Map<String, T>的地图(接受要填充的地图).
这种方法实现如下:
static void populateMap(Map<String, T> map, Class<T> type) {
...
// Parses into the specified type and returns an object of that type.
T obj = parse(..., type);
map.put (key, obj);
...
return map;
}
Run Code Online (Sandbox Code Playgroud)
编译好了.在我的调用者中,我尝试使用任何MyClass实例(无论类型)填充地图作为值.因此我使用以下代码:
// Loses type information
Map<String, MyClass<?>> m = new HashMap<>();
populateMap(m, MyClass.class);
Run Code Online (Sandbox Code Playgroud)
这不编译.编译错误:
populate(Map<String,T>, Class<T>)类型...中的方法不适用于参数(Map<String,MyClass<?>>, Class<MyClass>)
我怎样才能解决这个问题?
我已经尝试将Notepad ++关联为eclipse中某些文件类型的默认编辑器.但是,它们在外部窗口中打开.我希望他们在我的IDE中打开.
是否有任何Eclipse插件可以将Eclipse中的Notepad ++作为内部编辑器集成?
我正在尝试为我创建的eclipse插件运行JUnit测试.但是,来自EGit插件的确认对话框阻止了我的视角加载,因此在我的控制台上为JUnit抛出了一个不必要的异常.我试图寻找卸载插件的可能性,但没有看到任何这样的选项.如何禁用Egit插件?
我将两个日期作为命令行参数,并想检查第一个日期是否在第二个日期之后。日期格式为“dd/MM/yyy”。示例:java dateCheck 01/01/2014 15/03/2014 我还需要检查硬编码到程序中的第三个日期是否在第二个日期之前。
我有一个Java类,它处理单值和多值数据.因此,它暴露了两种方法:getValue()和getValues().但是,当getValue为多值数据调用该方法时,我想抛出某种异常.我可以使用的最相关的异常类是什么?我觉得IllegalAccessException不合适,因为我没有使用反射或任何这样的发现技术; 这两种情况都IllegalArgumentException不合适,因为我没有通过任何论据.
在尝试运行导出没有错误的eclipse产品时,我得到了以下异常
java.lang.NullPointerException
at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.<init>
Run Code Online (Sandbox Code Playgroud)
任何线索?
完整堆栈跟踪:
!SESSION 2013-07-23 02:08:52.676 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_21
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Command-line arguments: -os linux -ws gtk -arch x86_64
!ENTRY org.eclipse.osgi 4 0 2013-07-23 02:08:54.202
!MESSAGE Application error
!STACK 1
java.lang.NullPointerException
at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.<init>(ModelServiceImpl.java:124)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createDefaultContext(E4Application.java:471)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:199)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:581)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at myapp.MyApp.start(MyApp.java:20)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at …Run Code Online (Sandbox Code Playgroud) java ×5
eclipse ×2
constructor ×1
date ×1
eclipse-rcp ×1
egit ×1
exception ×1
generics ×1
junit ×1
junit4 ×1
multivalue ×1
notepad++ ×1
object ×1
servlets ×1
test-suite ×1
types ×1
uninstall ×1