假设我有一个接口'Inter',而Inter有一个方法
Inter someMethod();
如何指定返回对象的类型必须与调用该方法的对象相同?
因此,如果我有两个实现Inter的类'C1'和'C2',如果C1的实例调用someMethod(c1.someMethod()
),结果将是C1的实例,而如果C2的实例调用someMethod结果将是C2的一个实例。
参数怎么样?如果国际米兰有第二种方法
void someMethod2(Inter inter)
如何指定参数必须是与调用方法的对象相同的类的实例?
答案 0 :(得分:10)
使用 Generics 。
public interface Inter<T> {
T someMethod();
void someMethod2(T obj);
}
public class C1 implements Inter<C1> {
public C1 someMethod() {
// ..
}
public void someMethod2(C1 obj) {
// ..
}
}
public class C2 implements Inter<C2> {
public C2 someMethod() {
// ..
}
public void someMethod2(C2 obj) {
// ..
}
}
参考:
Generic Types (The Java™ Tutorials > Generics)
修改 :(使用有界通用类型;回应OP的评论)
public interface Inter<T extends Inter<T>> {
T someMethod();
void someMethod2(T obj);
}
public class C1 implements Inter<C1> {
public C1 someMethod() {
return new C1();
}
public void someMethod2(C1 obj) {
// ..
}
}
public class C2 implements Inter<C3> { // ERROR
..
}
但是,接下来是抓住了。
public class C2 implements Inter<C1> { // COMPILES!
..
}
因为C1
也满足T extends Inter<T>
。我相信这是可以的。
参考:
Bounded Type Parameters (The Java™ Tutorials > Generics)
答案 1 :(得分:2)
您可以尝试这样的事情
public interface Inter<T> {
public T doSomething();
}
public class C1 implements Inter<C1> {
@Override
public C1 doSomething() {
return new C1();
}
}
public class C2 implements Inter<C2> {
@Override
public C2 doSomething() {
return new C2();
}
}
答案 2 :(得分:0)
如何指定返回对象的类型必须是 与调用该方法的对象相同吗?
你不能用Java做到这一点。