A Java class that implements a method with parameters that are subtypes specified in the interface

I had some trouble mastering generic drugs I've read Oracle's tutorial on generics, which doesn't seem to solve my problem I don't know what to search for when I find the answer

Suppose I have the following code:

public abstract class Buff<V> {
    public V value;
{

public interface Buffable<V> {
    public void buff(Buff<V extends Buff> buff);
}

public class DoubleBuff extends Buff<double> {
    public double value;
}

public class DoubleBuffable implements Buffable<DoubleBuff> {
    public void Buff(DoubleBuff buff) {
        //implementation
    }
}

I want to be able to create a class that inherits buff and has a member "value", but specify the type of value (see doublebuff) I also want to define the class that implements the buff method using the input parameter, which belongs to the subtype of buff

Doublebuffable is a class that implements bufferable, but you need to enter doublebuff instead of stringbuff

Did I correctly express my generic?

Solution

The first is grammar Statement:

public interface Buffable<V> {
    public void buff(Buff<V extends Buff> buff);
}

should:

public interface Buffable<V extends Buff> {
    public void buff(Buff<V> buff);
}

The type variable you want should be specified in the class declaration

But you said:

In this way, the following statement will better suit your statement:

public interface Buffable<V extends Buff<?>> {
    public void buff(V buff);
}

You may want to change Part if you need a more specific buff type

Finally, other required changes and final classes:

public abstract class Buff<V> {
    public V value;
}
public interface Buffable<V extends Buff<?>> {
    public void buff(V buff);
}
// instead of primitive types,you should use their wrappers: double-->Double
public class DoubleBuff extends Buff<Double> {
    public double value;
}
public class DoubleBuffable implements Buffable<DoubleBuff> {
    public void buff(DoubleBuff buff) {
        //implementation
    }
}
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
分享
二维码
< <上一篇
下一篇>>