考虑派生类的基类,其中基类应该为其所有派生提供一些(多态)方法,例如armithmetic或bitweise重载运算符.派生类不应修改此操作以确保正确执行.但是,与此同时,我想进行评估 - 在我的示例中函数isError() - 运算符必须是子类和纯虚拟的,因此必须定义:
class Mom
{
public:
virtual bool operator && (const Mom&) const final
{
return this->isError() && p_rOther.isError();
}
private:
virtual bool isError() = 0;
};
Run Code Online (Sandbox Code Playgroud)
鉴于当前标准,似乎不允许这样做,因为"纯虚拟性"意味着子类必须实现基类的所有虚函数,而"final"关键字与此范例相矛盾.
任何建议或想法如何处理这个矛盾?
Java - 我有一个接口 InterfaceA,它具有三个方法 - method1、method2、method3。
最终类实现此接口。这个类和接口位于 Jar 中,并且它们的实现未知。
类的方法 method2 未按预期工作。我可以通过哪些可能的方式来正确实现/覆盖此方法。
我想不通为什么在 lambda 表达式中捕获的变量是最终的或有效的最终变量。我看了这个问题,真的没有得到答案。
这个变量捕获是什么?
当我为我的问题搜索解决方案时,我读到这些变量是最终的,因为并发问题。但是对于这种情况,我们为什么不能用reentrant lock对象锁定 lambda 中的任务代码。
public class Lambda {
private int instance=0;
public void m(int i,String s,Integer integer,Employee employee) {
ActionListener actionListener = (event) -> {
System.out.println(i);
System.out.println(s);
System.out.println(integer);
System.out.println(employee.getI());
this.instance++;
employee.setI(4);
integer++;//error
s="fghj";//error
i++;//error
};
}
}
Run Code Online (Sandbox Code Playgroud)
在这个特定的代码中,我想知道为什么最后三个语句给出错误的原因,以及为什么我们要变异,Employee因为它是一个局部变量。(Employee 只是一个带有 getter 和 setter 的类int i。)
我也想知道为什么我们也可以变异this.instance。
我感谢对我上面提到的所有事实的完整详细回答。
考虑以下 Java 类:
public class C {
private int n;
private final int x;
private final int y;
public C(int n) {
this.n = n;
if (n < 0) {
x = -1;
y = -1;
} else {
x = 1;
y = 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
的x,y依赖n,在设置之后就不能改变了。这如何在 Scala 中实现?Aprivate val x是最终的,但既然是最终的,val它就不能在“构造函数”中更改。Aprivate var x是私有的,但不是最终的,因此虽然它对用户不可见,但对于可能错误地修改它的程序员来说是可见的。
在单个“最终”变量的情况下,可以像在这个答案中那样做,但是如果有两个(或更多,就像我实际编码的那样),那么我不知道该怎么做。这是一种方法:
class C(n: Int) {
private val x = if (n < 0) …Run Code Online (Sandbox Code Playgroud) 我不会尝试扩展Pattern,因为我们不能(我会换行),但我想知道为什么Pattern类是最终的?
我的意思是这个课程可以扩展到最大的用途,但他们选择让它成为最终的.为什么?
如果我问它,它更像是一种技术(好奇?)方式而不是"java是如此糟糕"的方式.
为什么不允许从子类构造函数设置受保护的最终字段?
例:
class A {
protected final boolean b;
protected A() {
b = false;
}
}
class B extends A {
public B() {
super();
b = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为在某些情况下会有意义,不是吗?
假设这个代码:
public static Dataset<Row> getData(SparkSession sparkSession,
StructType schema, String delimiter, String pathToData) {
final Dataset<Row> dataset = sparkSession
.read()
.option("delimiter", "\\t")
.csv(pathToData);
StructType nSchema= newSchema(schema, schema.size(), dataset.columns().length);
...
}
Run Code Online (Sandbox Code Playgroud)
在将变量提供给 newSchema 方法之前声明变量并使它们成为 final 是最佳实践吗?
public static Dataset<Row> getData(SparkSession sparkSession,
StructType schema, String delimiter, String pathToData) {
final Dataset<Row> dataset = sparkSession
.read()
.option("delimiter", "\\t")
.csv(pathToData);
final int dataSize = dataset.columns().length;
final int schemaSize = schema.size();
StructType nSchema = newSchema(schema, schemaSize, dataSize);
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我目前有以下代码,由于我怀疑static block在分配之前没有被调用,因此无法正常工作programCutoffDate2015.
private final static Calendar programCutoffDate2015Cal = Calendar.getInstance();
static{
programCutoffDate2015Cal.set(2015, 12,31);
}
private final static Date programCutoffDate2015 = programCutoffDate2015Cal.getTime();
Run Code Online (Sandbox Code Playgroud)
以前我使用的是已弃用的API:
private final static Date programCutoffDate2015 = new Date(2015, 12,31);
Run Code Online (Sandbox Code Playgroud)
如何使用JDK中未弃用的较新API来完成相同的结果?
这两个单词在swift Static中有什么区别,您不能从此类以及最终类继承。什么时候应该使用它们?
通常人们会更加关注静态词和类词,但是区别在于静态词不能固有。
谢谢大家