相关疑难解决方法(0)

你如何在C++中声明一个接口?

如何设置代表接口的类?这只是一个抽象的基类吗?

c++ inheritance abstract-class interface pure-virtual

781
推荐指数
11
解决办法
46万
查看次数

Java 8中Default或Defender方法的目的

Java 8包含了一个名为Defender方法的新功能,它允许在接口中创建默认方法实现.

首先,对于Java中所有精简程序员来说,这是一个巨大的范式转换.我查看了Brain Goetz给出的JavaOne 13演示文稿,他正在讨论集合库中的新内容stream()parallelStream()实现.

为了在Collection界面中添加新方法,他们不能在不破坏以前版本的情况下添加新方法.所以他说,为了迎合这一点,我们增加了Default方法的新功能.

public interface SimpleInterface {
  public void doSomeWork();

  //A default method in the interface created using "default" keyword
  default public void doSomeOtherWork(){
    System.out.println("DoSomeOtherWork implementation in the interface");
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题基本上是默认方法只是在需要向接口添加新方法而不破坏客户端代码时才有用吗?或者它也有一些其他用途吗?

java java-8 default-method

43
推荐指数
2
解决办法
8634
查看次数

为什么Rust不支持特征对象向上转换?

鉴于此代码:

trait Base {
    fn a(&self);
    fn b(&self);
    fn c(&self);
    fn d(&self);
}

trait Derived : Base {
    fn e(&self);
    fn f(&self);
    fn g(&self);
}

struct S;

impl Derived for S {
    fn e(&self) {}
    fn f(&self) {}
    fn g(&self) {}
}

impl Base for S {
    fn a(&self) {}
    fn b(&self) {}
    fn c(&self) {}
    fn d(&self) {}
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能投&Derived&Base:

fn example(v: &Derived) {
    v as &Base;
}
Run Code Online (Sandbox Code Playgroud)
error[E0605]: non-primitive cast: `&Derived` as `&Base`
  --> …
Run Code Online (Sandbox Code Playgroud)

oop language-design liskov-substitution-principle rust

40
推荐指数
4
解决办法
6616
查看次数