因此列表或数组不适合作为参数。因为它们不会强制大小或确切的子类型!
[这些代码仅供参考,您可能会发现编译错误。]
我需要一个带有接受可变长度参数列表的方法的基类。这允许我有一个普通班级。例如:
abstract class baseClass{
public abstract void serialize(Object... data);
}
现在我想创建一些特定的子类,所以我需要在子类中有固定大小的参数列表。例如像这样的东西(但这种语法错了!):
class subClass1 extends baseClass{
@Override
public void serialize(Object data1){
//method body...
}
}
class subClass2 extends baseClass{
@Override
public void serialize(Object data1, Object data2){
//method body...
}
}
我应该如何编写子类?
在其他情况下,我的子类想明确定义参数的类型(因为这将允许编译时检查)。例如:
class subClass3 extends baseClass{
@Override
public void serialize(int data1){
//method body...
}
}
class subClass4 extends baseClass{
@Override
public void serialize(int data1, double data2, String data3){
//method body...
}
}
我应该怎么写这个?
答案 0 :(得分:0)
重写的一个重要规则......
- 参数列表应与被覆盖的列表完全相同 方法
醇>
参考其他规则 http://www.tutorialspoint.com/java/java_overriding.htm
或者您也可以使用重载。类似下面的代码,可以出现在子类
中 void test(Object data) {
// some logic here
super.test(data);
}
我不知道你的要求是什么,但我可能会制作超级方法"参数化"这样子类可以提供具体的实现。
==================== EDITED ========================== =========== 我不知道你的用例。但根据帖子,以下是我能想到的解决方案。请检查一下是否有效。
abstract class baseClass<T>{
public abstract void serialize(T... data);
}
class subClass1 extends baseClass <String>{
@Override
public void serialize(String... data) {
if(data.length>1)throw new IllegalArgumentException("Accepts only single string");
}
}
class subClass2 extends baseClass<Integer>{
@Override
public void serialize(Integer... data) {
}
}
public static void main(String[] args) {
baseClass<String> sc1 = new subClass1();
sc1.serialize("test");
baseClass<Integer> sc2 = new subClass2();
sc2.serialize(1,2);
}
答案 1 :(得分:0)
之前我还没有使用过序列化数据,但你可以这样做:
public abstract void serialize(Object[] data)
{
for(Object obj : data)
{
//do something
}
}
-Kaz