此代码将无法编译,因为存在对静态字段的非法引用.
public enum Foo {
A,
B;
private Foo[] foos = new Foo[] { Foo.A };
}
Run Code Online (Sandbox Code Playgroud)
您是否应该能够从非静态字段初始化程序访问静态字段?例如:
public class Foo {
static int A;
private int[] foos = new int[] { Foo.A };
}
Run Code Online (Sandbox Code Playgroud)
编译好了.
注意,foos在第一个示例中编译静态会编译.
Collection CollectionFactory::createFromMap(const std::string& name,
const DataMap& dm) const
{
if (!Collection::isNameValid(name))
{
const std::string error = "invalid collection name";
throw std::invalid_argument(error);
}
Collection c(name, dm);
dm.initDataCollection(&c, true);
return c;
}
Run Code Online (Sandbox Code Playgroud)
每当执行throw语句时,我都会遇到分段错误.这是Valgrind输出的原因.我不知道发生了什么.
==21124== Invalid read of size 1
==21124== at 0x41D2190: parse_lsda_header(_Unwind_Context*, unsigned char const*, lsda_header_info*) (eh_personality.cc:62)
==21124== by 0x41D24A9: __gxx_personality_v0 (eh_personality.cc:228)
==21124== by 0x4200220: _Unwind_RaiseException (unwind.inc:109)
==21124== by 0x41D2C9C: __cxa_throw (eh_throw.cc:75)
==21124== by 0x4079BFB: corestore::CollectionFactory::createFromMap(std::string const&, corestore::DataMap const&) const (CollectionFactory.C:43)
==21124== by 0x8188F86: CollectionFactoryTest::testCreateNewFromMap_InvalidName() (CollectionFactoryTest.C:91)
==21124== by 0x81895D3: CppUnit::TestCaller<CollectionFactoryTest>::runTest() (TestCaller.h:166) …Run Code Online (Sandbox Code Playgroud) int[] answer= new int[map.size()];
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (int j=0; j<answer.length;j++){
int x=map.get(keys.get(j));
answer[j]=x;
}
return answer
Run Code Online (Sandbox Code Playgroud)
当我在循环中x使用打印时System.out.println(x),我得到了值,1, 2, 3但是当我返回答案并打印出来时,我得到了[I@9826ac5.知道为什么吗?
这更多的是一个最佳实践的问题,希望能借鉴别人的经验。您是否建议始终使用 @Column(name=) 和 @Table(name=) 显式指定列和表的名称?我有点担心一些实施细节可能会改变。此外,指定它可能会提供一些针对重构代码的弹性。我还认为这可能会让代码更清晰地明确说明名称。另一方面,它使代码在许多不需要的地方变得更加冗长。
当我将此代码更改为Member m1 = new Member ();它完美无缺.为什么它不适用于超类参考?请有人解释一下吗?
public class Family {
String Surname = "Richard";
String Address = "No:10, High Street,Colombo";
}
public class Member extends Family{
String Name;
int age;
public void Details() {
System.out.println("full Name ="+ Name +" "+ Surname);
System.out.println("Age =" +age);
System.out.println("Address =" + Address);
}
public static void main(String[] args) {
Member m1 = new Family ();
m1.Name="Anne";
m1.age=24;
m1.Details();
}
Run Code Online (Sandbox Code Playgroud)