Home  >  Article  >  Backend Development  >  How to get a reference to a concrete type from a reference to an interface

How to get a reference to a concrete type from a reference to an interface

王林
王林forward
2024-02-09 16:39:14841browse

How to get a reference to a concrete type from a reference to an interface

In PHP, an interface is an abstract class that defines a set of methods. We can ensure that a class has specific behavior by implementing an interface. However, sometimes we need to get a reference to a concrete type from a reference to an interface. This may cause some confusion in some cases. So, this article will show you how to get a reference to a concrete type from a reference to an interface. Whether you are a beginner or an experienced developer, this article will help you. Next, let’s get down to business and explore the solution to this problem.

Question content

I'm trying to understand how methods, interfaces and concrete types work in go.

For example, here.

My code is:

type i interface {mymethod(....)}
type a struct{i i....} 
func (a *a) mymethod(....) {
}

So a implements interface i.

In client code:

i := somefunction(....) // i is of type I
i.MyMethod(....)

How to get the reference to a from i?

Solution

  • A set of method signatures is stored in the interface type. Any implementation of a method defined in an interface can be stored as its value.

  • If the variable is defined using an interface type, can access the methods defined in the interfaceand other methods associated with the implemented typecannot be accessed.

interface:

type i interface {
    value() string
}

Implementation:

type a string

func(a a) value() string {
    return string(a)
}

func (a a) type() string {
 return  reflect.typeof(a).name()
}

In client code:

    // define a variable with the type of i.
    var a i = a("a") 

    // method value() defined in the i interface can be
    // called.
    value := a.value()

     // method type() can not be called, because it is not defined in the interface.
    typ := a.type()

Note: If you use a pointer receiverimplementation method as shown below. You need to assign the implemented pointer to i.

Implementation:

type a string
func(a *a) value() string {
  return string(a)
}

In client code:

 a := A("a")
 var i I = &a 

The above is the detailed content of How to get a reference to a concrete type from a reference to an interface. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete