标签: downcast

试图在java中向下传播Object to File

我写了下一段代码:

private ArrayList<File> filter() {

    ArrayList<File> result = _filters.get(0).buildTree(_dir.listFiles());

    for (int i=1; i<_filters.size(); i++){
        File[] tempDir =  result.toArray();
        result = _filters.get(0).buildTree(tempDir);
    }

    return result;

}
Run Code Online (Sandbox Code Playgroud)

正如你可以看到我有一个FILE的ArrayList,然后我使用返回和Object []数组的result.toArray,但它之前是File,所以为什么我不能将它转发回File,因为我试图在第3个在循环线?我得到下一个错误:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.io.File;
at oop.ex1.filescript.Command.filter(Command.java:50)
at oop.ex1.filescript.Command.run(Command.java:28)
Run Code Online (Sandbox Code Playgroud)

我有什么选择?

java arraylist downcast

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

Scala:downcasting抛出java.lang.ClassCastException

从非Java背景到Scala给我带来了很多困难,包括这个.

scala> class A
defined class A

scala> class B extends A      
defined class B

scala> val a = new A
a: A = A@2e893a4a

scala> val b = new B
b: B = B@3a47c130

scala> a.asInstanceOf[B]
java.lang.ClassCastException: A cannot be cast to B
...

scala> b.asInstanceOf[A]
res1: A = B@3a47c130
Run Code Online (Sandbox Code Playgroud)

我知道ClassCastException被抛出,因为在运行时,a它看起来不像B,但实际上它是(据我所知).这里发生了什么?任何解决方法?谢谢.

编辑:JVM如何理解a无法转换为B?它a.getClass和之间进行了一些浅薄的比较B吗?

PS.我正在尝试将一个私有变量添加到库类中,并覆盖其中一个接受在库中定义的类作为参数的类方法(我正在尝试将该字段添加到的类).

casting scala classcastexception downcast

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

有没有更容易/更好的方法来做到这一点,因为C#中不允许向下转换?"

可能是一个争论性话题,但是......我真的很讨厌我不能做到以下几点:

class User 
{
   public string ImageURL {get;set;}
}

class UserUI : User 
{
   public Brush ImageBrush {get;set;}
}

User user = GetFromUserFromServer(); //returns User type object, not UserUI
UserUI userUI = user;
userUI.ImageBrush = CreateBrush(userUI.ImageURL);
Run Code Online (Sandbox Code Playgroud)

相反,我使用以下内容:

class User 
{
   public virtual string ImageURL {get;set;}
}

class UserUI : User 
{
   public override string ImageURL 
    {
        get
        {
            return base.ImageURL ;
        }
        set
        {
            if (value != base.ImageURL )
            {                    
                base.ImageURL = value;
                ImageBrush = CreateBrush(value);
            }
        }
    }

   public …
Run Code Online (Sandbox Code Playgroud)

.net c# downcast

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

是不是真的倾向于不可能?它对我来说很好

我知道已经发布了一些与此相同主题相关的问题,但我看到了不同的答案,所以我对哪个答案是正确的感到困惑.

在下面的链接中,人们提到转发不可能 转换/转换基类型为派生类型

在下面的链接中,人们提到只有当派生类是基类downcast和upcast的实例时,才可能进行 向下转换.

我做了一个小实验并使用直接转换在一个迷你项目(C#)上实现了向下转换,例如:DerivedClass dc =(DerivedClass)baseClass,而不检查DerivedClass是否是BaseClass的实例,令我惊讶的是,它正在工作很好,没有任何错误,所以为什么人们说降级是不可能的?

所以我的问题是,转发真的不可能吗?为什么人们似乎对这个话题有不同的答案?毕竟哪一个是真正的答案?有人可以更详细地解释一下吗?

示例代码:

public class Order {  }

public class PurchaseOrder : Order { // some new properties here for PurchaseOrder}

public static PurchaseOrder GetOrder()
{
    Order order = new Order();
    return (PurchaseOrder)order;
}
Run Code Online (Sandbox Code Playgroud)

c# oop inheritance downcast

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

派生类中引入的公共接口

两个类,D1并且D2从一个抽象基类派生B.他们每个人都在分享共同声明公共接口B,但他们每个人可能也有自己特定的公共接口(例如D2具有D2.Bar()这才有用D2对象):

public abstract class B
{
    public int N { get; set; }
    public abstract void Foo();
}

public class D1 : B
{
    public override void Foo()
    {            
    }
}

public class D2 : B
{
    public override void Foo()
    {
    }

    public void Bar()
    {            
    }
}
Run Code Online (Sandbox Code Playgroud)

我不断派生对象的组合在单个集合,(如表),因为有时候我不得不打电话共同(继承)在集合中的所有对象,但有时我想调用方法Bar()D2唯一对象:

        var list = new List<B>();
        list.Add(new D1());
        list.Add(new D2());
        foreach(var b in …
Run Code Online (Sandbox Code Playgroud)

c# oop inheritance downcast

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

C++ - 向上转换和向下转换

在我的例子中:

在向上看,第二次d.print()打电话不应打印"基地"吗?

是不是"d"派生对象上传到基类对象?

在低迷时期,它有什么优势?

你能用实际的方式解释上传和下传吗?

#include <iostream>
using namespace std;

class Base {
public:
    void print() { cout << "base" << endl; }
};

class Derived :public Base{
public:
    void print() { cout << "derived" << endl; }

};

void main()
{
    // Upcasting
    Base *pBase;
    Derived d;
    d.print();
    pBase = &d;
    d.print();

    // Downcasting
    Derived *pDerived;
    Base *b;
    pDerived = (Derived*)b;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance class downcast upcasting

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

从(对基对象的基引用)到(派生类引用)的静态转换

main下面的函数中,第一个static_cast是有效的,因为我试图将一个(对Derived1类的基类引用)转换为派生引用但是为什么第二个转换打印带有这些值,虽然它打印了垃圾值d2.y,但我认为它应该是警告或编译错误。对基对象的基引用如何选择派生类的值(d2.y在这种情况下,我也可以为其分配一个值)

有人可以解释一下在这两种情况下会发生什么。

class Base1
{
 public:
  Base1()
  {
    x = 999;
  }
 int x;
};

class Derived1: public Base1
{
  public:
  Derived1()
 {
    y = 1000;
 }
  int y;
};

int main()
{
 Derived1 d;
 std::cout << d.x << " " << d.y << std::endl;
 Base1& b = d;
 Base1 b1;

 Base1 & b2 = b1;

 Derived1& d1 = static_cast<Derived1&>(b);
 Derived1& d2 = static_cast<Derived1&>(b2);

 std::cout << d1.x << " " …
Run Code Online (Sandbox Code Playgroud)

c++ downcast c++11

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

为什么我们需要在 C# 中进行 Upcasting 和 Downcasting?

考虑我们有三个类,Shape 是基类,另外两个类 Circle 和 Text 继承自基类(Shape)

形状文件

namespace ObjectOriented
{
    public class Shape
    {
        public int Height { get; set; }
        public int Width { get; set; }
        public int X { get; set; }
        public int Y { get; set; }

        public void Draw()
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

文本文件

using System;

namespace ObjectOriented
{
    public class Text : Shape
    {
        public string FontType { get; set; }
        public int FontSize { get; set; }

        public void Weirdo()
        {
            Console.WriteLine("Weird …
Run Code Online (Sandbox Code Playgroud)

c# downcast upcasting

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

在 Java 中向上转换是如何工作的?

我在 Java 中采用了向上和向下转换的概念,它们也被称为扩大和缩小。

  • UpCasting(扩展)从派生类到基类自动发生。即如果它有一个 is-a 关系。
  • 必须明确地进行向下转换以进行运行时检查。

好的,我明白了概念和一切。但是,在这种情况下它是如何工作的?

public class ObjPair {
    Object first;
    Object second;

    public ObjPair(Object first, Object second) {
        this.first = first;
        this.second = second;
    }

    public Object getFirst() {
        return first;
    }    
    public Object getSecond() {
        return second;
    }

    public static void main(String[] args) {
        ObjPair objPair = new ObjPair("A",2.2); // Goes widning conversion
        System.out.println(objPair.getFirst());
        System.out.println(objPair.getSecond());
    }
}
Run Code Online (Sandbox Code Playgroud)

ObjPair objPair = new ObjPair("A",2.2);

  • 这是通过 upcast、String 到 object 和 Double 到 object,状态存储在 objPair 中。伟大的..!!!

现在,当我执行objPair.getFirst()和 …

java casting downcast upcasting

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

将基实例指针转换为派生实例指针是否合法?(该实例不是派生实例)

我想Base从班级本身之外以不合格的方式(为什么?宏魔法)访问班级成员。策略是在Derived类中执行并将指向指针转换Base为指向指针Derived(即使实例不是a Derived)。

就我尝试而言,代码编译并正确运行:这是标准还是意外标准是UB)?链接

#include<iostream>

struct Base{
    int a=3;
};

struct Derived: public Base{
    int getA(){
        // this scope has unqualified access to Base class members
        return a;
    }
};

int main(void){
    Base b;
    std::cerr<<((Derived*)(&b))->getA()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance pointers casting downcast

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