作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有一个 Object
类型的对象 obj
,这样 System.out.println(obj)
会生成 {a=一些文本,b=更多文本,c=更多文本}
。
现在我们想要创建一个新对象obj2
,它只是{a=Some text}
(即字段b
和c
是从 obj
中修剪掉的)。所以我们定义一个类A
如下:
class A {
String a;
}
然后我们按如下方式初始化obj2
:
A obj2 = (A) obj
。
不幸的是,我在执行此操作时遇到运行时错误。
问题:我们如何定义上面概述的 obj2
?
最佳答案
您收到异常的原因是 obj
仅属于 Object
类型;你不能“神奇地”把它变成 A
所以它适合 obj2
。在 Java 中,您只能将对象转换为它已经的类型;你无法制作出 A
以外的东西一个A
。相反,您必须手动复制属性,即设置 obj2.a
至obj.a
.
分配 obj2.a = obj.a
的一种替代方法就是使两者obj
和obj2
类型 A
,其中 obj 也是一种更具体的类型 B
。例如,假设您要定义 A
类如下:
public class A {
public String a = "Some text";
}
然后您可以定义 B
如:
public class B extends A {
public String b = "Some more text";
public String c = "Even more text";
}
最后,您可以这样创建对象:
B obj = new B();
A obj2 = obj;
System.out.println(obj2.a); // Prints "Some text"
System.out.println(obj2.b); // Throws an error
请注意,在第二种方法中,obj2 仍然具有属性 b
和c
;它们只是无法访问。
关于java - 如何在Java中修剪对象的某些字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34280716/
我是一名优秀的程序员,十分优秀!