有没有方法用子类的静态成员类参数化超类?
exampleSuperClass.java:
package foo;
public class ExampleSuperClass<T> {
protected T field;
public ExampleSuperClass(T field) {
this.field = field;
}
public T getField() {
return field;
}
}
package foo;
public class ExampleSubClass extends ExampleSuperClass<Member> {
static class Member {
}
public ExampleSubClass() {
super(new Member());
}
}
ExampleSubClass.java
编译失败,错误为:
[javac] ExampleSubClass.java:3: error: cannot find symbol
[javac] public class ExampleSubClass extends ExampleSuperClass<Member> {
[javac] ^
[javac] symbol: class Member
[javac] 1 error
或者与:
成员不能解析为类型
如果用另一个包保护的顶级类来参数化ExampleSubClass,它工作得很好(也就是没有错误)。
这背后的驱动力是我有一个泛型超类和许多不同的${SubClass-extends-GenericSuperClass}.java
和${ClassUsedBySubClass}.java
对。但是由于classusedbysubclass
只被subclass
引用,最好是:
ClassusedBySubclass
的访问,使其成为静态成员类和classusedbysubclass
自己的文件来减少文件数。那么,在参数化超类时,有没有一种方法可以使用子类的成员类呢?
如果没有--有替代的方法吗?
是的,你能做到。但是,由于Java使用声明之外的作用域进行名称解析,因此必须使用ExampleSubClass
的名称来限定member
:
public class ExampleSubClass extends ExampleSuperClass<ExampleSubClass.Member> {
...
}
C++ 类 & 对象 我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进
考虑以下代码: GCC v6.1编译它,叮当声3.8拒绝它,错误如下: 2:错误:没有成员名为'foo'在'U' struct S{静态constexpr int bar=T::foo;}; 哪个编译器是对的? 会不会是因为在我们尝试在中使用它时不是一个完整的类型? 在这种情况下,它应该被认为是GCC的错误,但我想知道我是否正确之前在错误跟踪器上搜索/打开问题… 编辑 与此同时,我已经向GCC打开
Singleton设计模式说我们应该在“single instance”类中定义一个私有静态属性。但是,没有适当的解释为什么数据成员必须是私有静态的。如果数据成员只是私有的,会有什么不同吗? 在以下代码中: 如果数据成员不是静态的,会有什么不同吗? 编辑:通过公开析构函数,它会改变单例设计的属性吗?
问题内容: 当我们序列化对象时,静态成员不会被序列化,但是如果需要的话,还有什么办法吗? 问题答案: 第一个问题是为什么需要序列化静态成员? 静态成员与类相关联,而不与实例相关联,因此在序列化实例时将它们包括在内是没有意义的。 第一个解决方案是使那些成员不是静态的。或者,如果这些成员在原始类和目标类中是相同的(相同的类,但可能是不同的运行时环境),则根本不要序列化它们。 我对如何在静态成员之间进行
我有以下示例类<code>Foo</code>和嵌套类<code<Bar</code<,所有内容都是<code>constexpr</code>: 我想测试调用<code>Foo::DoTheThing</code>返回1: 海湾合作委员会和Clang都在这里抱怨,但MSVC没有 GCC表示: 错误: ,或者如果我将< code>Bar的定义移到< code>Foo之外,我可以让GCC和Clang
我已经知道java中的内部类不能有静态成员,除非它们被宣布为最终的。但是,理论上不应该在局部类中声明静态成员吗? 例如。 我知道内部类的标准初始化是这样发生的: 但为什么不这样呢?? 当创建OuterClass实例时,它还包含innerClass的副本。因此,如果允许在innerClass中存在静态(只是静态的,但不是最终的)成员,那么应该(或可以)以这种方式访问它们 outer class in