我有下面指定的行为。
interface ValueEditorPopupView<T> {
void setValue(T value);
void setApplyEnabled();
}
abstract class ValueEditorPopup<T> implements ValueEditorPopupView<T> {
@Override
public void setApplyEnabled() {
System.out.println("In ValueEditorPopup.setApplyEnabled()");
}
}
class ListEditorTextField {
private final ValueEditorPopup<String> popup;
ListEditorTextField() {
popup = new ValueEditorPopup<>() {
@Override
public void setValue(String value) {
System.out.println("In Anonymous Class impl setValue()");
}
// When I add a method that is NOT defined in the abstract class/interface
// I get an error for using the diamond operator in the class declaration above
// "Cannot use '<>' due to non-private method which
// doesn't override or implement a method from a supertype"
// This error clears if I explicitly specify `new ValueEditorPopup<String>(){}`
// in the anonymous class instantiation or
// add `getValues` to the abstract class/interface.
public void getValues() {}
};
}
}
我不明白为什么会导致错误以及为什么添加这些方法/类型会修复它。不确定我在这里错过了什么。
这是根据设计,并在JLS§15.9.5中规定:
如果具有ClassBody
的类实例创建表达式使用菱形(
您的public
getValue
方法没有覆盖超类中的任何内容,因此由于隐式添加了@override
,因此出现了一个错误。
这样做的理由是:
当<代码>
我对此的解释是,当您在匿名类中声明公共方法时,它最有可能覆盖一个方法,因此当您使用
时,编译器会隐式地将
@Overder
放在您的所有公共方法上
很少需要在匿名类中声明公共方法而不重写。如果要声明一个方法,只需将其声明为私有方法——除非将
new
表达式指定给var
,否则无论如何都不能从外部调用它,这是非常罕见的。
我有以下代码:https://pastebin.com/19njjj9s(我放在这里是因为对于stackoverflow来说代码太多了) 但是它不会覆盖onClick方法(第192行),我不明白为什么。 重写onclick方法背后的想法是获取日期并接收radiogroup以设置其中一个值。如果有人能帮我,我会帮你的。
下面是我的课:
我正在使用JUnit 5,并从“软件测试”书中复制了代码,以便创建一个模拟对象进行测试。部分测试器代码是: 我有一个编译器错误,它说“方法isLeap(int)必须覆盖或实现一个超类型方法”。此错误在我覆盖isLeap()方法的行中报告。(@over下面的行) 好吧,令人惊讶的是,这就是我所做的。所以我不知道这是什么抱怨。下面是simpleDate类中的isLeap()方法: 正如您所看到的,测试
我有一个超级班 我希望这个孩子班级 但是Xcode说 重写实例方法必须与它重写的声明一样可访问 那么,我如何覆盖超类中的公共方法是子类中的私有方法 谢谢你
我有3个类,配置如下:Class1有几个方法,其中一些是抽象的: 接下来,来自同一个包的class 2扩展了class 1,覆盖了它的抽象方法并添加了一些其他方法: 最后,另一个包中的class3扩展了class2并覆盖了class1中的一个方法: 我正在使用Eclipse,并且它在编码时不会检测到任何错误。我正在使用Maven Build构建项目,但构建失败,说thisIsTheMethod o
我是Android和Java的初学者。我寻找这个错误的答案,但stackOverflow中的任何东西都不适合我的情况。我在读一本书,书中说我们需要使用一个onListItemClick()方法,该方法来自我们创建的扩展ListFragment的类(CrimeListFragment)(使用该方法和类是必需的)。 然而,我不断发现以下错误: 错误说 “CrimeListFragment类型的onLi