在java中有一种方法来指定generics类的types参数必须是一个接口(不仅仅是扩展它!) 我想要做的是以下几点: public class MyClass<X extends SomeInterface, Y extends SomeOtherClass & X> 这意味着Y必须是SomeOtherClass的子类并实现X.我目前得到的编译器是 typesX不是一个接口; 它不能被指定为有界参数 那么,我怎样才能告诉编译器X必须是一个接口? 编辑: 好的,我想我过分简化了我的问题。 让我们使用我的实际应用领域来更加清楚: 我有一个表示图的API。 一个图包含节点和边缘对象。 所有这三个类都实现了Shape接口。 形状可能具有子形状,父形状并属于图表。 问题是,我需要制作这个API的两个版本:一个只有基本function的开放源代码,另一个带有更多function的扩展源代码。 但是,扩展API只能提供返回扩展types( ExtendedDiagram , ExtendedNode , ExtendedEdge和(这里出现问题) ExtendedShape )的方法。 所以我有这样的东西: /* BASIC CLASSES */ public interface Shape<X extends Shape<X,Y>, Y extends Diagram<X,Y>>{ public List<X> getChildShapes(); public X getParent(); public Y getDiagram(); … […]
Java中的接口与类相似,但接口的主体只能包含抽象方法和final字段(常量)。 最近我看到一个问题,看起来像这样 interface AnInterface { public default void myMethod() { System.out.println("D"); } } 根据接口定义, 只允许抽象方法 。 为什么它允许我编译上面的代码? 什么是default关键字? 另一方面,当我试图写下面的代码,然后说modifier default not allowed here default class MyClass{ } 代替 class MyClass { } 任何人都可以告诉我的default关键字的目的? 是否只允许在一个界面内? 它与default (没有访问修饰符)有什么不同?
PHP中的接口是否有属性,还是只有方法?
我知道这个问题已经被反复询问,但我似乎无法find足够的答案。 所以要说清楚我想知道的是什么,我将分成两个问题: 为什么不能有静态方法签名? 我会尝试抢占非答案,问为什么在世界上我想要做到这一点如下:我想能够静态调用SqliteCodeGenerator和MssqlCodeGenerator GetDbConnectionType() : interface ICodeGenerator { // this is the method I would like to be static: string GetDbConnectionType(); } abstract class CodeGeneratorBase : ICodeGenerator { public abstract string GetDbConnectionType(); public void GenerateSomeCode(StringBuilder s) { s.AppendLine("var foo = new " + GetDbConnectionType() + "();"); } } class SqliteCodeGenerator : CodeGeneratorBase { public […]
只要我正在努力挖掘代表的用途和目的,我想提出这个问题,尽pipe可能有类似的提法。 我知道委托作为函数指针在C ++中使用。 事实上,如果在C#中,它们主要作为接口和多态的替代方法。 既然我可以创build一个特定的类的子类,并为它们提供适当的方法,那么除此之外还有什么代表呢? 代表们使用过程中是否存在规定其使用或只是代码可维护性的情况? 你会推荐他们在接口上的广泛部署? 我只是谈论代表,我想把他们的angular色与事件angular色区分开来。
可能重复: Java的接口和Haskell的types类:差异和相似之处? 当我开始学习Haskell时,我被告知types类比接口更强大/不同。 一年以后,我已经广泛地使用了接口和types类,我还没有看到一个例子或解释,他们是如何不同。 这不是一个自然而然的启示,我错过了一些显而易见的事实,或者实际上并没有真正的区别。 search互联网并没有带来任何实质性的进展。 所以呢,你有答案吗?
我对Android框架和Java很熟悉,想创build一个通用的“NetworkHelper”类,它将处理大部分的networking代码,使我可以从中调用网页。 我遵循这篇文章从developer.android.com创build我的networking类: http : //developer.android.com/training/basics/network-ops/connecting.html 码: package com.example.androidapp; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.AsyncTask; import android.util.Log; /** * @author tuomas * This class provides basic helper functions and features for network communication. */ public class NetworkHelper { private Context […]
从Eclipse / Java背景来看,我最喜欢的function之一就是能够快速地将接口所需的所有方法存根出来。 在Eclipse中,我可以从源菜单中select“覆盖/实现”来为接口的任何方法生成存根方法。 我想在Objective-C中做同样的事情。 例如,如果我声明一个实现“NSCoding”协议的类,我想让Xcode自动生成实现此协议所需的方法。 这是令人沮丧的查找,然后复制/粘贴每个协议,我试图实现所需的方法的签名。 我一直在试图找出这是否可能,但还没有发现任何有希望的。 这在XCode中可能吗?
如果我有一个协变types参数的通用接口,如下所示: interface IGeneric<out T> { string GetName(); } 如果我定义这个类层次结构: class Base {} class Derived1 : Base{} class Derived2 : Base{} 然后,我可以使用显式的接口实现在一个类上实现接口两次,如下所示: class DoubleDown: IGeneric<Derived1>, IGeneric<Derived2> { string IGeneric<Derived1>.GetName() { return "Derived1"; } string IGeneric<Derived2>.GetName() { return "Derived2"; } } 如果我使用(非generics的) DoubleDown类并将其转换为IGeneric<Derived1>或IGeneric<Derived2>它将按预期方式运行: var x = new DoubleDown(); IGeneric<Derived1> id1 = x; //cast to IGeneric<Derived1> Console.WriteLine(id1.GetName()); //Derived1 […]
在C#编程语言中, Krzysztof Cwalina在注释中指出: 我们明确地决定不添加对多重inheritance的支持[…]缺乏多重inheritance迫使我们添加接口的概念,而接口的概念反过来又对框架的演化,更深的inheritance层次结构和其他许多问题负责问题。 接口是面向对象编程语言的核心概念。 我不遵循“强迫我们添加接口的概念”的意思, Krzysztof是否意味着必须对使用否则将使用多重inheritance的接口进行某些devise决定? 或者,他的意思是说interface是由于缺乏多重inheritance而引入C#的? 你能提供一个例子吗?