How do I reference a class type whose interface is implemented in Java?
•
Java
I encountered an interface problem in a program I want to create an interface that has a method that receives / returns a reference to the type of its own object This is the same:
public interface I {
? getSelf();
}
public class A implements I {
A getSelf() {
return this;
}
}
public class B implements I {
B getSelf() {
return this;
}
}
I can't use "I", it's a "?", Because I don't want to return a reference to an interface, but a class I searched and found that there is no way to "self reference" in Java, so I can't just use "? In the" self "keyword or similar examples Actually, I came up with a solution
public interface I<SELF> {
SELF getSelf();
}
public class A implements I<A> {
A getSelf() {
return this;
}
}
public class B implements I<B> {
B getSelf() {
return this;
}
}
But it seems to be a solution or something like that Is there another way?
Solution
When extending an interface, there is a method to force its own class as a parameter:
interface I<SELF extends I<SELF>> {
SELF getSelf();
}
class A implements I<A> {
A getSelf() {
return this;
}
}
class B implements I<A> { // illegal: Bound mismatch
A getSelf() {
return this;
}
}
This even works when writing generic classes There is only one drawback: one must throw it to himself
As Andrey Makarov
class A<SELF extends A<SELF>> {
SELF getSelf() {
return (SELF)this;
}
}
class C extends A<B> {} // Does not fail.
// C myC = new C();
// B myB = myC.getSelf(); // <-- ClassCastException
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
