标签: interface

传递接口和类重新加载之间的性能差异

人们一致认为使用接口比使用类更好.我当然同意:一种接受的库方法ArrayList而不是List废话.

人们一致认为,表现总是一致的.在这里,我的基准是不同的. 结果 接口和抽象类都有1到4个实现.当使用两个以上的实现时,性能开始出现分歧.我正在寻找这种行为的解释(以及错误共识的起源).

java performance abstract-class interface

9
推荐指数
1
解决办法
940
查看次数

在Go中调用接口指针的方法

我仍然在围绕Go中的接口和指针的细节包裹.我遇到了一个包含指向net.Conn的指针的简单类型的问题.当我尝试在指针上调用方法(Close)时,我正在接收type *net.Conn has no field or method Close

这是一个突出问题的简单例子:http://play.golang.org/p/Q4LB0wi6Tk

Close()在这里打电话的正确方法是什么?

pointers interface go

9
推荐指数
2
解决办法
1796
查看次数

为什么Java 8中的注释类型中不允许使用默认方法?

我今天看到了一个精彩的注释世界的一瞥,所以我尝试了自己的代码,但它不想编译:

public @interface SomeAnnotation {
    public String sayHello1() default "Hello world";

    default public String sayHello2() {
        return "Hello world";
    }
}
Run Code Online (Sandbox Code Playgroud)

您看到的sayHello1是如何指定注释的默认参数.
我想知道的是,为什么sayHello2不允许,这是自Java 8以来可用的.

对我而言似乎提供相同的功能,或者我在这里遗漏了什么?

此外,为什么注释可以访问自Java 5以来的默认方法体(尽管非常简单),而接口必须等到Java 8?

java annotations interface java-8

9
推荐指数
1
解决办法
4248
查看次数

必需和提供的接口有什么区别

我一般都知道:

接口是一种引用类型,它类似于一个类,它只能包含常量,方法签名,默认方法,静态方法和嵌套类型.方法体仅适用于默认方法和静态方法.接口无法实例化 - 它们只能由类实现或由其他接口扩展?

但是必需和提供的接口有什么区别?

java oop uml modeling interface

9
推荐指数
3
解决办法
9724
查看次数

带界面的枚举 - 一般如何做?

如果我有一组枚举,并希望让它们都实现一个接口,这是一般的正确方法吗?

枚举:

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)

java enums interface

9
推荐指数
1
解决办法
602
查看次数

在Typescript中混合使用接口

我有一个包含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方法,并使每种方法的类型安全.

但有时这些reqparam对象是由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)

interface typescript

9
推荐指数
1
解决办法
2710
查看次数

为什么实现具有类型约束的通用接口的泛型类需要重复这些约束?

假设我有一个以下的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)

类型约束是否也从接口"继承"(不是正确的词,我知道)是否有意义?

.net c# generics inheritance interface

9
推荐指数
1
解决办法
113
查看次数

Android - 为什么使用接口被认为是在Activity和Fragment之间进行通信的最佳实践?

在本文档"与其他片段进行通信"中,Google告诉我们,传递Activity和Fragment的最佳实践是实现一个接口.然后,此接口可以由Fragment调用并在Activity中执行必要的行为.

但也有一种黑客方式来做到这一点.通过方法"getActivity()"直接获取Activity ,然后我们可以使用它下面的所有"公共方法".

这让我很困惑.因为我无法想到使用黑客方式做任何这一点的任何关键缺点.

我头脑中出现的第一种方法的优点是:

  1. 我可以在我的活动下限制"资源可访问性".但由于Fragment能够调用"getActivity()",因此它实际上可以访问其中的所有"公共"方法.所以这不能说服我.
  2. 代码中更具可读性和故事性.使用第一种方法,代码告诉我们"此活动仅打开片段的这些特定可访问区域".我们可以通过查看Activity中的代码直接知道"Fragment内部可能会干扰Activity的内容" .否则,我们需要打开Fragment下的代码来查看它的作用.

好吧,在我总结出这些之后,我对自己有点说服了.但坦率地说,我真的想要一些其他坚实的,并且必须有理由这样做.任何想法或文件将非常感谢!!

java android interface android-fragments android-activity

9
推荐指数
1
解决办法
2557
查看次数

接口的组成[Golang]

有没有办法让接口还包含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()它的类型.

oop interface go

9
推荐指数
1
解决办法
2362
查看次数

Spring autowire接口

我有一个接口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还是什么?也可以通过指定构造函数的参数来自动装配?

java spring interface autowired

9
推荐指数
1
解决办法
3万
查看次数