编辑:我将在此留下这个例子.阅读评论以获取更多信息,但一般情况下:请勿使用此设计!这不好!
我现在搜索了一段时间的答案,但找不到任何真正具体的说法,不,你不能因为...或者是的,你可以这就是你做的.
所以问题是,我可以创建一个定义Object类型参数的抽象方法,然后使用具体的参数类型实现它,如下所示:
public abstract class ToBeOverriden {
public Object method1 (Object parameter);
public String method2 (Object parameter);
public void method3 (Object parameter);
}
Run Code Online (Sandbox Code Playgroud)
然后用这个覆盖它:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
人是我创造的对象.返回类型可以是任何.目前我不能这样做.它不让我.我的猜测是因为我的Class没有扩展Object.虽然一切都扩展了对象...所以......
或者我是否需要刷新我的Java知识?:)
编辑:添加了更复杂的类结构.
谢谢!
bez*_*max 19
您需要使用Java Generics:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
添加:
E参数可以省略,代码仍然可以编译.但是,如果不同的实现ToBeOverriden将使用不同的返回类型,我认为保留更好E.但这是个人品味的问题 - 我不喜欢Object在代码中看到任何地方.
新增2:
至于您在问题中的更新,您需要为每个方法都有一个单独的Generic类型.例如:
public abstract class ToBeOverriden<A,B,C> {
public Object method1 (A parameter);
public String method2 (B parameter);
public void method3 (C parameter);
}
Run Code Online (Sandbox Code Playgroud)
但是,通常,当你需要这么糟糕的结构时 - 那么你的代码设计是错误的.在95%的情况下,1个泛型类型参数就足够了.在4.99%的情况下,2个泛型类型参数就足够了.
| 归档时间: |
|
| 查看次数: |
11580 次 |
| 最近记录: |