可以从许多线程访问类.在这种情况下必须是记录器也是最终的和静态的吗?谢谢.
class Foo
{
public:
virtual int foo() final = 0;
};
Run Code Online (Sandbox Code Playgroud)
编译好.
这不Foo只是浪费空间,而是制造事故吗?或者我错过了什么?
我在网上找不到任何关于此的参考资料.但只是想知道一个类中的最终字段是否应该总是static或者只是一个约定.基于我对它们的用途的理解,我觉得做的事情比语言强加的更合乎逻辑.
这是一个非常简单的C++ 11程序,它测试了final关键字的使用,以防止类被子类化:
template<class T> class Base final
{
public:
Base() {}
private:
T t;
};
class Derived : public Base<int> {};
int main(int, char **)
{
Derived d;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试在Mac OS X(Clang)下编译上述程序,我会收到预期的错误消息:
jeremy-friesners-mac-pro-3:~ jaf$ g++ -std=c++11 ./temp.cpp
./temp.cpp:10:28: error: base 'Base' is marked 'final'
class Derived : public Base<int> {};
^
./temp.cpp:1:29: note: 'Base' declared here
template<class T> class Base final
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用Visual Studio 2013在Windows下编译相同的代码,它将编译没有错误.Base但是,如果我使该类非模板化,Visual Studio会识别该final关键字并发出错误.
这是Visual Studio 2013中的错误,还是我错过了关于如何final允许/期望关键字与模板化类一起操作的一些细微差别?
我有一个用于不可变用途的类,因此我想标记所有字段final.
但是,该类被序列化和反序列化以通过网络发送.为此,需要一个空构造函数.这可以防止我创建最终字段.
我确信这是一个相当普遍的问题,但我找不到解决方案.我该怎么办?
最终类和将类构造函数作为私有类之间的区别究竟是什么.
我知道两者都不能被分类(如果我错了,请纠正我).他们有什么不同吗?
有人可以澄清下面代码的重要性.
class A
{
int i = 10;
public void setI(int b)
{
i = b;
}
public int getI()
{
return i;
}
}
class Test
{
public static void main(String args[]) throws Throwable
{
final A ob = new A();
ob.setI(10);
System.out.println(ob.getI());
}
}
Run Code Online (Sandbox Code Playgroud)
对象A被声明为final,但我可以更改此对象的实例变量的值,并还可以检索更新的值.那么将对象声明为final是什么意义.我知道将原始数据类型声明为final,这使得该变量保持不变.
这是我现在面临的问题.我有一个类,比方说Foo,这个类定义了一个getBar返回Bar实例的方法.该类Bar在内部定义Foo,并被声明public static final.我想要做的就是定义一个类MyFoo扩展Foo,但我也想对Bar与MyBar加入我自己的功能(方法,属性等).我也想getBar回来MyBar.
问题Bar是最终的.以下是我想要做的事情的说明:
public class Foo {
Bar bar = new Bar();
public Bar getBar(){
return bar;
}
....
public static final class Bar {
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是:
public class MyFoo extends Foo {
public MyBar getBar(){ // here I want to return an instance of MyBar
}
public static final class MyBar …Run Code Online (Sandbox Code Playgroud) final ×10
java ×8
static ×3
c++ ×2
c++11 ×1
constructor ×1
immutability ×1
logging ×1
oop ×1
pure-virtual ×1
templates ×1