标签: method-signature

是否可以在Objective-C中将方法作为参数传递?

我有一个方法,通过单个方法调用内部变化,我想传递它作为参数变化的方法的方法/签名...这可能在目标C中,或者是太多希望对于?

objective-c method-signature

21
推荐指数
2
解决办法
1万
查看次数

为什么varargs应该是方法签名中的最后一个?

如果我尝试编写如下方法

public void someStuff(Object ... args, String a )
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

someStuff方法的变量参数类型Object必须是最后一个参数.

我不完全理解变量参数类型的要求是最后一个.任何输入都会有所帮助.

java method-signature

21
推荐指数
3
解决办法
7209
查看次数

委托任何方法类型 - C#

我想要一个将执行任何外部方法的类,如下所示:

class CrazyClass
{
  //other stuff

  public AnyReturnType Execute(AnyKindOfMethod Method, object[] ParametersForMethod)
  {
    //more stuff
    return Method(ParametersForMethod) //or something like that
  }
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?是否有代理人采用任何方法签名?

c# generics reflection delegates method-signature

16
推荐指数
1
解决办法
3162
查看次数

什么是"覆盖等价",它与@Override有什么关系?

的Javadoc@Override注释,我遇到了以下规则:

如果使用此批注类型对方法进行批注,则编译器需要生成错误消息,除非至少满足下列条件之一:

  • 该方法会覆盖或实现在超类型中声明的方法.
  • 该方法的签名覆盖等效于Object中声明的任何公共方法.

我对第一点很清楚,但我不确定第二点.

"覆盖等价"是什么意思?Object在这方面,公共方法有何特别之处?为什么这不属于第一个标准?

更新说明:这仅适用于Java 7文档.在Java 6的文档不说的覆盖等价什么.为什么要改变?


更新:

在咨询了JLS(第8.4.2节)之后,我发现了以下对覆盖等价的解释:

的方法的签名m1是一个子签名的方法的签名m2,如果任一:

  • m2具有相同的签名m1,或
  • 签名与签名m1的擦除(§4.6)相同m2.

两个方法签名m1并且m2覆盖等效的,如果它们m1是子签名m2或是m2其子签名m1.

据我所知,这回答了第一个问题("它是什么意思?")和第三个问题("为什么第一个条件不包括这个?").

如果我理解正确(如果我没有请通知我!),只有一种情况,两种方法是覆盖等价的,并且不属于原始问题的第一个条件.当子类方法的签名的擦除与超类方法的签名相同时,情况就是这种情况,而不是相反.

因此,当我们在尝试"覆盖"类的公共方法时尝试添加类型参数时,原始问题的第二个条件才会发挥作用Object.我尝试了以下简单示例来测试它,使用未使用的类型参数:

public class Foo {
    @Override
    public <T> boolean equals(Object obj) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,这个类没有编译,因为该方法不实际 …

java overriding annotations language-design method-signature

16
推荐指数
2
解决办法
1614
查看次数

在没有标题的情况下调用c ++ dll中的函数

我想从一个DLL调用一个方法,但我没有源文件头文件.我试图使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?

有没有办法调用这种方法?

谢谢,

c++ dll signature method-signature dumpbin

14
推荐指数
4
解决办法
2万
查看次数

接口如何包含在其签名或返回类型中引用接口的具体实现类型的方法?

假设我正在设计类似以下界面:

public interface MyInterface{
  public MyInterface method1();
  public void method2(MyInterface mi);
}
Run Code Online (Sandbox Code Playgroud)

但是,有一点需要注意,返回类型for method1和参数method2匹配具体实现而不仅仅是MyInterface.也就是说,如果我有MyInterfaceImpl这个实现MyInterface,它需要具有以下内容:

public class MyInterfaceImpl implements MyInterface{
  @Override
  public MyInterfaceImpl method1(){...}

  @Override
  public void method2(MyInterfaceImpl mi){...}
}
Run Code Online (Sandbox Code Playgroud)

如上所述,method1不会导致任何编译错误,但没有任何保证返回类型在所有实现中都匹配.当然method2甚至不会编译,因为签名与接口不匹配.

一个候选解决方案是在泛型中使用自引用或递归边界:

public interface MyInterface<T extends MyInterface<T>>{
  public T method1();
  public void method2(T mi);
}

public class MyInterfaceImpl implements MyInterface<MyInterfaceImpl>{
  @Override
  public MyInterfaceImpl method1();

  @Override
  public void method2(MyInterfaceImpl mi);
}
Run Code Online (Sandbox Code Playgroud)

这将得到我想要的一个例外:其他实现可能会传递错误的泛型类型(没有任何力量T来匹配具体类型).所以其他人可能会实现以下内容:

public class NotMyInterfaceImpl implements MyInterface<MyInterfaceImpl>{ …
Run Code Online (Sandbox Code Playgroud)

java generics interface return-type method-signature

14
推荐指数
1
解决办法
3087
查看次数

14
推荐指数
1
解决办法
2366
查看次数

设计问题:传递您使用的字段或传递对象?

我经常看到两种方法接口的冲突策略,概括如下:

// Form 1: Pass in an object.
double calculateTaxesOwed(TaxForm f) { ... }

// Form 2: Pass in the fields you'll use.
double calculateTaxesOwed(double taxRate, double income) { ... }

// use of form 1:
TaxForm f = ...
double payment = calculateTaxesOwed(f);

// use of form 2:
TaxForm f = ...
double payment = calculateTaxesOwed(f.getTaxRate(), f.getIncome());
Run Code Online (Sandbox Code Playgroud)

我见过第二种形式的拥护者,特别是在动态语言中,可能更难评估正在使用的字段.

但是,我更喜欢第一种形式:它更短,错误的空间更小,如果对象的定义稍后更改,您不一定需要更新方法签名,也许只是改变您使用内部对象的方式.方法.

这两种形式都有令人信服的一般情况吗?是否有明确的例子说明何时应该使用第二种形式?我可以指出是否有SOLID或其他OOP原则来证明我决定使用一种形式而不是另一种形式?如果您使用动态语言,上述任何答案都会改变吗?

oop method-signature

12
推荐指数
1
解决办法
343
查看次数

如何使用Method :: Signatures使Perltidy工作?

我正在使用EclipseEPIC结合来编写我的Perl代码.我将EPIC配置为使用Perltidy和"-pbp"(perl最佳实践样式)来格式化我的代码.

使用Method :: Signatures命名参数时,这不起作用.例如,func (:$arg1, : $arg2)格式化为func (: $arg1, : $arg2)产生错误.

此外,func关键字不被识别,sub因此缩进是错误的.

有关之前的悬而未决的问题和这个跨岗位.

eclipse perl code-formatting method-signature perl-tidy

12
推荐指数
1
解决办法
780
查看次数

为什么Stream.Write不采用UInt?

Stream.Write使用的对我来说似乎非常不合逻辑int,而不是UInt......对于这个事实,除了"遗留"代码之外是否有其他解释?有人想写-1字节吗?!?

.net c# method-signature cls-compliant

12
推荐指数
2
解决办法
643
查看次数