[编辑]:这个问题是关于我无法控制的类型的。因此,使它们无法继承超类或实现接口是不可能的。我希望不封装类型就能做到这一点。
我想编写一个方法,将包含特定方法的所有对象作为参数接受。
例如,我们有2种完全不同的类型,它们都包含具有相同签名的 recipientList.forEach(function (recipient) {
let personalizedContent = replaceAll(emailContent, '[First Name]', firstName);
personalizedContent = replaceAll(emailContent, '[Last Name]', lastName);
personalizedContent = replaceAll(emailContent, '[Email]', recipient.EmailAddress.Address);
var message = {
"Message": {
"Subject": subject,
"Body": {
"ContentType": "html",
"Content": personalizedContent
},
"ToRecipients": [recipient],
"Attachments": []
},
"SaveToSentItems": "true"
};
postEmail(accessToken,message);
});
方法:
get
如何编写可以接受这两种类型的方法?
public class TypeOne {
public int get() { /* Some implementation */ }
}
public class TypeTwo {
public int get() { /* Some other implementation */ }
}
答案 0 :(得分:6)
首先使方法成为非静态方法,其次使两个类都实现具有get
方法的接口。最后,更改callGetOnObject
以接受实现该接口的类的实例:
public interface Getter {
int get();
}
public class TypeOne implements Getter {
public int get() { /* Some implementation */ }
}
public class TypeTwo implements Getter {
public int get() { /* Some other implementation */ }
}
然后:
public static int callGetOnObject(Getter gettableObject) {
return gettableObject.get();
}
编辑:
由于问题已被修改,因此,这是新的答案:如果您不控制此代码并且不愿意包装它,那么您就不走运了:无法通过AFAIK进行处理。
答案 1 :(得分:2)
据我所知,无法通过检查传入对象是否具有特定方法来对其进行实际过滤,但是您可以使用反射来验证输入,然后调用该函数。这是一个示例:
const WithContext = (Component) => {
return (props) => (
<CustomContext.Consumer>
{value => <Component {...props} value={value} />}
</CustomContext.Consumer>
)
}