EDIT:我将把这个作为一个例子。请阅读评论以获取更多信息,但一般来说:不要使用此设计!这不好!
我搜索答案有一段时间了,但找不到任何真正具体的说法,不,你不能,因为……或者是的,你可以,那就是你这样做的方式..
所以问题是,我可以创建一个定义对象类型参数的抽象方法,然后使用具体的参数类型来实现它,如下所示:
public abstract class ToBeOverriden {
public Object method1 (Object parameter);
public String method2 (Object parameter);
public void method3 (Object parameter);
}
然后用这个覆盖它:
public class Implementation {
@Override
public DateTime method1 (Person parameter){
return new DateTime();
}
@Override
public String method2 (MotorCycle parameter){
return new DateTime();
}
@Override
public void method3 (String parameter){
return new DateTime();
}
}
其中 Person 是我创建的对象。返回类型可以是任何类型。目前我无法做到这一点。它不允许我。我的猜测是,这是因为我的类没有扩展对象。虽然一切都扩展了 Object...所以...
或者我需要刷新我的 Java 知识吗? :)
编辑:添加了更复杂的类结构。
Thanks!
你需要使用Java 泛型 http://docs.oracle.com/javase/tutorial/java/generics/index.html:
public abstract class ToBeOverriden<E,V> {
public E method (V parameter);
}
public class Implementation extends ToBeOverriden<DateTime,Person> {
@Override
public DateTime method (Person parameter){
return new DateTime();
}
}
Added:
E
可以省略参数,代码仍然可以编译。但是,如果不同的实现ToBeOverriden
会使用不同的返回类型,我认为最好保留E
。但这是个人品味的问题 - 我不喜欢看到Object
代码中的任何位置。
Added 2:
至于问题中的更新,您需要为每个方法都有一个单独的通用类型。例如:
public abstract class ToBeOverriden<A,B,C> {
public Object method1 (A parameter);
public String method2 (B parameter);
public void method3 (C parameter);
}
然而,通常,当您需要如此可怕的结构时 - 那么您的代码设计方式是错误的。在 95% 的情况下,1 个泛型类型参数就足够了。在 4.99% 的情况下,2 个泛型类型参数就足够了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)