标签: overloading

Java 如何知道使用 lambda 表达式调用哪个重载方法?(供应商、消费者、可调用……)

首先,我不知道如何恰当地表达这个问题,所以这是一个建议。

假设我们有以下重载方法:

void execute(Callable<Void> callable) {
    try {
        callable.call();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

<T> T execute(Supplier<T> supplier) {
    return supplier.get();
}

void execute(Runnable runnable) {
    runnable.run();
}
Run Code Online (Sandbox Code Playgroud)

从这张表出发,我从另一个问题中得到了答案

Supplier       ()    -> x
Consumer       x     -> ()
BiConsumer     x, y  -> ()
Callable       ()    -> x throws ex
Runnable       ()    -> ()
Function       x     -> y
BiFunction     x,y   -> z
Predicate      x     -> boolean
UnaryOperator  x1    -> x2
BinaryOperator x1,x2 -> x3
Run Code Online (Sandbox Code Playgroud)

以下是我在本地得到的结果:

Supplier       ()    -> …
Run Code Online (Sandbox Code Playgroud)

java lambda overloading function

23
推荐指数
2
解决办法
2142
查看次数

C#,XmlDoc:如何引用方法重载

如果我有这两种方法

public Foo Get(string bar) { ... }
public Foo Get(int bar) { ... }
Run Code Online (Sandbox Code Playgroud)

并在不同的方法上编写这段xml文档

/// <summary>
/// Has a close relation to the <see cref="Get"/> methods.
/// </summary>
Run Code Online (Sandbox Code Playgroud)

我得到一个蓝色波浪形Get,说这是一个不明确的参考'得到'.这是真的,但我希望它引用两者.这样做的正确方法是什么?或者我应该只引用单个方法重载?

c# overloading xml-documentation

22
推荐指数
1
解决办法
2612
查看次数

VB.NET中的阴影与重载

当我们使用newC#时,我个人认为只是作为一种解决方法来覆盖没有虚拟/可覆盖声明的属性,在VB.NET中我们有两个"概念" ShadowsOverloads.

在哪种情况下喜欢彼此?

.net vb.net oop overloading shadows

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

C中的函数重载

今天,看一下手册页open(),我注意到这个函数是'重载':

   int open(const char *pathname, int flags);
   int open(const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)

我不认为这是可能的C.实现这个目的的"诀窍"是什么?

LATER EDIT:
所以它并没有真正超载,因为在使用varargs时 - 你只能提供相同类型的多个参数.那么,mode_t幕后是一个int吗?

c posix overloading

22
推荐指数
3
解决办法
1782
查看次数

C# - 如何"重载"代理?

首先,我正在阅读一些论坛和MSDN中的帮助,并且所有人都说代理人不能超载.

现在,我希望有这样的东西:

public delegate void OneDelegate();
public delegate void OneDelegate(params object[] a);

public void DoNothing(params object[] a) {}
public void DoSomething() { /* do something */ }

private OneDelegate someFunction;

someFunction = new OneDelegate(DoSomething);
someFunction = new OneDelegate(DoNothing);
Run Code Online (Sandbox Code Playgroud)

所以,就像你知道的那样,你不能这样做,因为OneDelegate只引用第一个而不是第二个.但是,有没有办法做到这一点?或类似的东西?

PS1:我希望拥有任意数量的OneDelegate声明,而不仅仅是一两个声明.

c# delegates overloading

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

C11类型泛型表达式 - 为什么不只是添加函数重载?

我刚刚阅读了关于C11的维基百科文章,这是2011年12月发布的C标准的新版本,我看到其中一个增加的功能是"类型通用表达式":

使用_Generic关键字的类型泛型表达式.例如,下面的宏CBRT(X)转换为cbrtl(X) ,CBRT(X)cbrtf(X) 取决于类型X:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X)
Run Code Online (Sandbox Code Playgroud)

这看起来非常糟糕 - 如果他们要改变语言,为什么不像C++一样添加函数重载?

c generics overloading c11

22
推荐指数
1
解决办法
5158
查看次数

叫哪种方法?(整数... a)与(int a,int b)

我刚刚发现了一个非常有趣的Java技巧:

void method1(Integer... a){
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以根据需要为此方法提供尽可能多的整数.

现在,如果我有一个类似的(重载)方法,如下所示:

void method1(int a, int b){

}
Run Code Online (Sandbox Code Playgroud)

执行以下行时运行哪个方法:

method1(1, 2);
Run Code Online (Sandbox Code Playgroud)

好吧,我可以通过用不同的方法指令测试它很容易找到它但是当我想到"重载"方法中的"规则"时,我必须确保每个重载方法必须相同,以便编译器知道究竟要使用哪一个.

在我看来,上面的代码不应该工作,因为编译器应该混淆.但是,当我尝试它时,它的工作原理.

所以..有没有人知道更多关于此的背景信息?

java methods overloading variadic-functions

22
推荐指数
1
解决办法
3839
查看次数

函数重载与函数模板 - C++

在关于C++的书籍中,当我们在C++中使用模板时,为什么我们会教我们使用函数重载

展示模板的有效(和正确)使用不是更好吗?与大多数C++书籍中教授函数重载的地方相反?

或者,是否有充分的理由使用一个而不是另一个?

c++ templates overloading

22
推荐指数
3
解决办法
2万
查看次数

C++转换运算符重载和多态

我对C++的这种行为感到困惑:

struct A {
   virtual void print() const { printf("a\n"); }
};

struct B : public A {
   virtual void print() const { printf("b\n"); }
};

struct C {
   operator B() { return B(); }
};

void print(const A& a) {
   a.print();
}

int main() {
   C c;
   print(c);
}
Run Code Online (Sandbox Code Playgroud)

那么,测验是,程序的输出是什么 - a或b?嗯,答案是答案.但为什么?

c++ polymorphism casting overloading operator-keyword

22
推荐指数
1
解决办法
1080
查看次数

在派生类中重载基类方法

我试图理解为什么下面的代码不能编译,显然该解决方案依赖于在派生类中明确声明对method_A的依赖.请参考以下代码:

class Base
{
  public:

    void method_A(int param, int param2)
    {
      std::cout << "Base call A" << std::endl;
    }

};

//does not compile
class Derived : public Base
{
  public:

    void method_A(int param)
    {
      std::cout << "Derived call A" << std::endl;
    }
};

//compiles
class Derived2 : public Base
{
  public:
    using Base::method_A; //compile
    void method_A(int param)
    {
      std::cout << "Derived call A" << std::endl;
    }
};

int main ()
{
  Derived myDerived;
  myDerived.method_A(1);
  myDerived.method_A(1,2);

  Derived2 myDerived2;
  myDerived2.method_A(1);
  myDerived2.method_A(1,2);
  return …
Run Code Online (Sandbox Code Playgroud)

c++ oop overloading

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