我一般都知道:
接口是一种引用类型,它类似于一个类,它只能包含常量,方法签名,默认方法,静态方法和嵌套类型.方法体仅适用于默认方法和静态方法.接口无法实例化 - 它们只能由类实现或由其他接口扩展?
但是必需和提供的接口有什么区别?
在Xamarin中,我编写了一个实现View.IOnTouchListener
接口的类.
这是我的代码:
public class OnTouchListener : View.IOnTouchListener
{
public bool OnTouch (View v, MotionEvent e)
{
return true;
}
void IDisposable.Dispose ()
{
throw new NotImplementedException ();
}
IntPtr Android.Runtime.IJavaObject.Handle {
get {
throw new NotImplementedException ();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我IDisposable.Dispose
和Android.Runtime.IJavaObject.Handle
代码项需要什么值,而不是throw new NotImplementedException ()
代码?
提前致谢
如果我有一组枚举,并希望让它们都实现一个接口,这是一般的正确方法吗?
枚举:
public enum MentalSkill implements SkillType {
ACADEMICS,COMPUTER,CRAFTS,INVESTIGATION,MEDICINE,OCCULT,POLITICS,SCIENCE;
private static final int UNTRAINED_PENALTY = -3;
@Override
public SkillType fromValue(String value) {
return valueOf(value);
}
@Override
public int getUntrainedPenalty() {
return UNTRAINED_PENALTY;
}
}
Run Code Online (Sandbox Code Playgroud)
接口:
public interface SkillType {
SkillType fromValue(String value);
int getUntrainedPenalty();
}
Run Code Online (Sandbox Code Playgroud)
持有班级(我怀疑这是不对的):
public class SkillsSet<T extends SkillType> {
T t;
Map<T,Integer> skills = new HashMap<>();
public SkillsSet(String[] skills) {
for (String string : skills) {
addSkill(string,t.getUntrainedPenalty());
}
}
private void addSkill(String skillString,Integer value) {
skills.put((T) t.fromValue(skillString), …
Run Code Online (Sandbox Code Playgroud) 我有一个包含80多个方法的类,每个方法都接受一个包含一些已定义接口的对象.
class Stuff {
/* many more */
getAccount(req: IAccount, callback: ICallback) {
return this._call('getAccount', req, callback);
}
getIds(req: IIDs, callback: ICallback) {
return this._call('getIds', req, callback);
}
/* many more */
}
Run Code Online (Sandbox Code Playgroud)
非常'无聊'的东西,因为它只是映射到底层_call
方法,并使每种方法的类型安全.
但有时这些req
param对象是由2个或更多接口组成的,而不是每次创建另一个接口都有"尴尬",如下所示:
export interface ILoled extends IAccount {
loled: boolean;
}
export interface IRofloled extends ILoled {
rofled: boolean;
}
class Stuff {
getLols(req: ILoled){
}
getRofls(req: IRofloled){
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法我可以把它作为方法参数列表中的接口的"内联"混合?喜欢(显然不起作用):
class Stuff {
getMoreStuff(req: <{} extends IAccount, ITime>) {
}
}
Run Code Online (Sandbox Code Playgroud) 在Java中,您可以在接口中初始化最终的静态字符串.Swift中还有一个方法吗?
假设我有一个以下的C#界面:
public interface IInterface<T> where T : SomeClass
{
void InterfaceMethod();
}
Run Code Online (Sandbox Code Playgroud)
而SomeClass的定义如下:
public class SomeClass
{
public void SomeMethod();
}
Run Code Online (Sandbox Code Playgroud)
现在我想定义接口的实现,它不会编译:
public class InterfaceImpl<T> : IInterface<T>
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Gives Error
}
}
Run Code Online (Sandbox Code Playgroud)
在我改为之前:
public class InterfaceImpl<T> : IInterface<T> where T : SomeClass
{
public void InterfaceMethod()
{
T test = default(T);
test.SomeMethod(); //Compiles fine
}
}
Run Code Online (Sandbox Code Playgroud)
类型约束是否也从接口"继承"(不是正确的词,我知道)是否有意义?
在本文档"与其他片段进行通信"中,Google告诉我们,传递Activity和Fragment的最佳实践是实现一个接口.然后,此接口可以由Fragment调用并在Activity中执行必要的行为.
但也有一种黑客方式来做到这一点.通过方法"getActivity()"直接获取Activity ,然后我们可以使用它下面的所有"公共方法".
这让我很困惑.因为我无法想到使用黑客方式做任何这一点的任何关键缺点.
我头脑中出现的第一种方法的优点是:
好吧,在我总结出这些之后,我对自己有点说服了.但坦率地说,我真的想要一些其他坚实的,并且必须有理由这样做.任何想法或文件将非常感谢!!
有没有办法让接口还包含Go中另一个接口定义的方法?
例如:
type BasicDatabase interface {
CreateTable(string) error
DeleteTable(string) error
}
type SpecificDatabase interface {
CreateUserRecord(User) error
}
Run Code Online (Sandbox Code Playgroud)
我想要一种方法来指定SpecificDatabase
接口包含BasicDatabase
接口.类似于Go的方式让你做结构的组合.
这样我的方法可以采用一种实现SpecificDatabase
但仍然可以调用CreateTable()
它的类型.
我有一个接口IMenuItem
public interface IMenuItem {
String getIconClass();
void setIconClass(String iconClass);
String getLink();
void setLink(String link);
String getText();
void setText(String text);
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个接口的实现
@Component
@Scope("prototype")
public class MenuItem implements IMenuItem {
private String iconClass;
private String link;
private String text;
public MenuItem(String iconClass, String link, String text) {
this.iconClass = iconClass;
this.link = link;
this.text = text;
}
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)
有没有办法只使用IMenuItem接口从配置类创建多个MenuItem实例?用@autowired还是什么?也可以通过指定构造函数的参数来自动装配?
为什么TreeMap
类型Map
没有定义方法tailMap
或headMap
.
Map<String, String> map = new TreeMap<>();
map.tailMap(); //cannot resolve method tailMap
Run Code Online (Sandbox Code Playgroud)
使用显式转换它可以工作:
((TreeMap<String, String>) map).tailMap("a");
Run Code Online (Sandbox Code Playgroud)
随着NavigableMap
一切都很好:
NavigableMap<String, String> map1 = new TreeMap<>();
map1.tailMap("a");
Run Code Online (Sandbox Code Playgroud)
如果我是对的,因为界面Map
缺少相应的方法,尽管面对对象map
是类的具体实现TreeMap
,当然确实拥有这样的方法.
只是寻找更详细的解释.
谢谢!