标签: downcast

为什么在java中不允许这种贬低?

假设我有一个超类Animal,以及一个子类Dog.

我们可以说:

Animal a = new Dog();
Run Code Online (Sandbox Code Playgroud)

我们不能低声说:

Dog b = new Animal();
Run Code Online (Sandbox Code Playgroud)

所以我明白动物不一定是狗.但是,为什么在狗容器中有动物"蓝图"会抛出异常呢?因为Dog从Animal继承了方法,当我们把这种动物放入狗容器中时,我们知道Dog继承/覆盖了Animal所有的方法,那为什么Java不允许这样呢?

谢谢!

java oop polymorphism downcast

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

用 C# 编写 Upcasting 和 Downcasting 表达式

我最近一直在研究 c# 中的向上转换和向下转换。我知道向上转换是指从派生类到基类的转换。但是,当我看到向上转换的实际示例(如下所示)时,我感到困惑。

public class Shape 
{
...
}

public class Circle : Shape
{
...
}

Circle circle = new Circle();
Shape shape = new Shape();
// Converting an object into its base class reference
shape = circle
Run Code Online (Sandbox Code Playgroud)

如果我们将 circle 转换为它的基类引用,它不应该像

circle = shape 
Run Code Online (Sandbox Code Playgroud)

对不起,如果这听起来太业余了。这是因为我一直看到以下格式的表达式:

int x = 3; // means assign 3 to variable x. 
Run Code Online (Sandbox Code Playgroud)

所以我很困惑为什么圆圈在右手边而不是在左手边。请指教。把我当作初学者。

c# downcast upcasting

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

如何将 nil 接口转换为 nil 其他接口

我有一个经典的 Go nil 接口问题。

我试图断言 an interface{},我从 a 分配nil error回一个error接口。这句话很令人困惑,所以我有一个方便的例子: https: //play.golang.com/p/Qhv7197oIE_z

package main

import (
    "fmt"
)

func preferredWay(i interface{}) error {
    return i.(error)
}

func workAround(i interface{}) error {
    if i == nil {
        return nil
    }
    return i.(error)
}

func main() {
    var nilErr error
    fmt.Println(workAround(nilErr))    // Prints "<nil>" as expected.
    fmt.Println(preferredWay(nilErr))  // Panics.
}
Run Code Online (Sandbox Code Playgroud)

输出:

<nil>
panic: interface conversion: interface is nil, not error

goroutine 1 [running]:
main.preferredWay(...)
    /tmp/sandbox415300914/prog.go:8
main.main()
    /tmp/sandbox415300914/prog.go:21 …
Run Code Online (Sandbox Code Playgroud)

go downcast type-assertion go-interface

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

是否可以进行动态的向下转换?

如何使用强运行时已知类型进行向下转换?

public class A {}

public class B : A { public int i; }

public class C
{
    B b = new B();
    A a = b;               // here upcast, and "a" still keeps link to "b"
    ((B)a).i;              // no problem it works

    Type t = b.GetType();  // BUT how to downcast with strongly runtime known type ?
    ((t)a).i;              // like here
}
Run Code Online (Sandbox Code Playgroud)

c# downcast

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

在 Java 中向下转型 + 使用可变参数调用方法

当我调用时a.displayName("Test"),它调用 Icecream 类的方法。displayName(String...s)方法接受可变参数。输出-

test Icecream
test Faloodeh 
test Faloodeh:  Faloodeh
test Faloodeh:  Faloodeh
Run Code Online (Sandbox Code Playgroud)

但是当我将方法更改为displayName(String s)(我已经在代码中注释掉了该部分)时,它会调用 Faloodeh 类的方法。新输出-

test Faloodeh 
test Faloodeh 
test Faloodeh:  Faloodeh
test Faloodeh:  Faloodeh
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样。

class Icecream{
    public void displayName(String...s){
        System.out.println(s[0]+" "+"Icecream");
    }
    /*public void displayName(String s){
        System.out.println(s+" "+"Icecream");
    }
    */
    public void describe(String s) {
        System.out.println(s+" "+"Icecream: Ice cream");
    }
}
class Faloodeh extends Icecream {
    public void displayName (String s){
        System.out.println(s+" "+"Faloodeh ");
    }

    public void describe (String s) …
Run Code Online (Sandbox Code Playgroud)

java variadic-functions downcast

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

特质贬低

如何将特征向下转换为结构,就像这个 C# 示例中那样?

我有一个基本特征和几个派生结构,必须将它们推入单个基本特征向量中。

我必须检查向量的每个项目是否可转换为特定的派生结构,如果是,则将其用作该类型的结构。

这是我的 Rust 代码,我不知道如何实现注释部分。

trait Base {
    fn base_method(&self);
}

struct Derived1;
impl Derived1 {
    pub fn derived1_method(&self) {
        println!("Derived1");
    }
}
impl Base for Derived1 {
    fn base_method(&self) {
        println!("Base Derived1");
    }
}

struct Derived2;
impl Derived2 {
    pub fn derived2_method(&self) {
        println!("Derived2");
    }
}
impl Base for Derived2 {
    fn base_method(&self) {
        println!("Base Derived2");
    }
}

fn main() {
    let mut bases = Vec::<Box<dyn Base>>::new();
    let der1 = Derived1{};
    let der2 …
Run Code Online (Sandbox Code Playgroud)

traits downcast rust

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

HashSet的迭代器的问题

我正在试图看看HashSet是否是我下一个项目的解决方案,所以我正在做一些非常简单的测试来检查功能.我有一个简单的课程Klant:

public class Klant {
    private int klantNummer;

    public Klant(int nummer) {
        this.klantNummer = nummer;
    }

    public int getKlantNummer() {
        return this.klantNummer;
    }
}
Run Code Online (Sandbox Code Playgroud)

并且通过组合的类使用a HashSet

public class MySet<Klant> { 
    private Collection<Klant> mySet = null;

    public MySet() {
        mySet=new HashSet<Klant>();
    }

    public void add(Klant elem) {
        mySet.add(elem);
    }

    public void toon() {
        Iterator<Klant> i = mySet.iterator();   
        while(i.hasNext()) {
            Klant k = i.next();
            System.out.println(k.);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是在方法toon() 基本上即使我指定的迭代器将包含Klant对象<Klant> 的本地k对象不向我提供的getKlantNummer()定义mthod Klantk …

java generics iterator hashset downcast

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

为什么DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC对于DYNAMIC_DOWNCAST来说是必要的?

我有两节课:

/*Switch.h*/
    class CSwitch : public CDeviceEntity {}
/*EndSystem.h*/
    class CEndSystem : public CDeviceEntity {}
Run Code Online (Sandbox Code Playgroud)

但是当我使用时:

CDeviceEntity* dev = NULL;
dev = topo->headList[i]->node;
if ( DYNAMIC_DOWNCAST( CEndSystem, dev ) != NULL ) {}
Run Code Online (Sandbox Code Playgroud)

" DYNAMIC_DOWNCAST"总是返回not NULL而dev是一种class CEndSystem或者class CSwitch.

如果使用:

/*Switch.h*/
    class CSwitch : public CDeviceEntity { DECLARE_DYNAMIC(CSwitch) } 
    and
/*Switch.cpp*/
    IMPLEMENT_DYNAMIC(CSwitch, CDeviceEntity)
/*EndSystem.h*/
    class CEndSystem : public CDeviceEntity { DECLARE_DYNAMIC(CEndSystem) }
    and
/*EndSystem.cpp*/
    IMPLEMENT_DYNAMIC(CEndSystem, CDeviceEntity)
Run Code Online (Sandbox Code Playgroud)

" DYNAMIC_DOWNCAST"返回NULLnot NULL根据 …

c++ mfc dynamic downcast

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

java使用object作为double而没有显式转换

说我有这个:

Object obj = new Double(3.14);
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以objDouble没有明确地使用它一样使用Double?例如,如果我想使用计算.doubleValue()方法Double.

java double casting object downcast

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

无法修改函数体内的函数参数

我在swift项目中有一个方法定义:

class func fireGetRequest(urlString: String!, username: String?, password: String?, completionBlock:(NSDictionary)->Void) {
    //check if user passed nil userName
    if username == nil || password == nil {
        // retrieve userName, password from keychain
        // here we have OR check since we have single value from pair it is of no use and can be considered as corrupted data
        // so it is better to retrieve stable data from keychain for further processing
        let (dataDict, error) = Locksmith.loadDataForUserAccount(kKeychainUserAccountName)

        // no error found …
Run Code Online (Sandbox Code Playgroud)

immutability downcast swift

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