我知道这个问题一直被问到,但我似乎无法找到足够好的答案.所以为了弄清楚我想知道的是什么,我将把它分成两个问题:
为什么接口不能有静态方法签名?我将尝试抢占非答案,询问为什么在世界上我想用以下内容执行此操作:我希望能够静态调用GetDbConnectionType()on SqliteCodeGenerator和MssqlCodeGenerator:
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 override string GetDbConnectionType()
{
return "SQLiteConnection";
}
}
class MssqlCodeGenerator : CodeGeneratorBase
{
public override string GetDbConnectionType()
{
return "SqlConnection";
}
}
Run Code Online (Sandbox Code Playgroud)另一方面,这是第二个问题的问题,如果你知道一个很好的替代方案来实现上述目标,那么无论如何......
假设我们有两个类, Tiger并且Aeroplane.这两种类型的一个共同点是速度.我知道,这将是不合逻辑创建一个超类ClassWithSpeed,然后派生子类Aeroplane,并Tiger从它.相反,它是最好创建一个包含方法的接口speed(),然后实现它Aeroplane和Tiger.我明白了.但是,如果没有接口,我们可以做同样的事情.我们可以定义方法speed()中Aeroplane和方法speed()的Tiger.唯一(也许是非常大的)缺陷是我们无法"到达" 接口引用的对象Tiger并Aeroplane通过接口引用.
我是Java和OOP的初学者,如果有人向我解释接口的作用,我将非常感激.干杯!
我有一个类和一个接口,当我尝试实例化接口时,我收到一个错误:
无法创建抽象类或接口的实例
我的代码如下:
namespace MyNamespace
{
public interface IUser
{
int Property1 { get; set; }
string Property2 { get; set; }
string Property3 { get; set; }
void GetUser();
}
public class User : IUser
{
public int Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public void GetUser()
{
//some logic here......
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试实例化时,IUser user = new IUser();我收到一个错误:
无法创建抽象类或接口的实例
我在这做错了什么?
在Java编程中,我们可以调用抽象类的静态方法吗?
是的我知道我们不能将静态与抽象类的方法一起使用.但我想知道为什么..?
这段代码:
interface Config {
int MAX_CONN = 20;
}
Run Code Online (Sandbox Code Playgroud)
编译和按我的预期工作.它看起来像是:
interface Config {
public static final int MAX_CONN = 20;
}
Run Code Online (Sandbox Code Playgroud)
对于Java接口中的常量,"public static final"是多余的吗?这对于Java 1.1,1.2,1.3,1.4,...,1.8是否适用,或者是否在Java版本中进行了更改?
当我注意到它是一个"静态"界面时,我正在阅读Map.Entry界面.我不太了解静态接口是什么,它与常规接口有什么不同?
public static interface Map.Entry<K,V>
这是界面的定义.文档:http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html
我试着把它放在我的视图对象的头文件中:
@property (nonatomic) UIColor color;
Run Code Online (Sandbox Code Playgroud)
存储应在此视图中绘制线条的颜色.
Xcode在这一行上给出了一个错误:
接口类型不能静态分配
这是什么意思,我该怎么办?
编辑:
我确实添加了*,在合成时,它说:
ARC禁止使用未指定的所有权或存储属性合成Objective C对象的属性?
xcode memory-management compiler-errors interface objective-c
在.Net 4.0上的C#的上下文中,是否有任何内置对象可以实现IQueryable<T>?
我有一个场景,我有一个接口,有一个像这样的方法:
interface SomeInterface
{
SomeMethod(arg1: string, arg2: string, arg3: boolean);
}
Run Code Online (Sandbox Code Playgroud)
像这样的一个类:
class SomeImplementation implements SomeInterface
{
public SomeMethod(arg1: string, arg2: string, arg3: boolean = true){...}
}
Run Code Online (Sandbox Code Playgroud)
现在问题是我似乎无法告诉接口第3个选项应该是可选的还是有一个默认值,就像我试图告诉接口有一个默认值我得到错误:
TS2174: Default arguments are not allowed in an overload parameter.
如果我从界面中省略默认值并像这样调用它:
var myObject = new SomeImplementation();
myObject.SomeMethod("foo", "bar");
Run Code Online (Sandbox Code Playgroud)
它抱怨参数与任何覆盖都不匹配.那么是否有一种方法可以为参数提供默认值并从接口继承,我不介意接口是否必须将值作为默认值,因为它始终是一个可选参数.
我在AWS中设置了VPC.我们创建了2个子网(A/24和B/24),直接使用所有没有IP /子网的IP进行进一步使用.
我们发现b/24没有被完全利用,我们在那里浪费了IP地址.
现在我们要减小子网大小并将实例从B/24移动到A/24.从B/24和/ 28范围创建4个较小的子网,并将服务器移回到创建的较小子网之一.
请告知我们可以应用的建议最佳实践,以便我们能够将我们的可用服务器保留在B/24中并创建多个子网.
interface ×10
java ×4
static ×3
c# ×2
abstract ×1
amazon-ec2 ×1
arguments ×1
c#-4.0 ×1
class ×1
final ×1
iqueryable ×1
jls ×1
linq ×1
networking ×1
objective-c ×1
oop ×1
types ×1
typescript ×1
xcode ×1