我有一个名为date的课程:
public class Date{
private String monthAndDate;
public Date(String inputMonthAndDate){
monthAndDate = inputMonthAndDate;
}
}
我有另一个名为Patient的课程。是否可以从Date类获取monthAndDate的语法并将其传递给Patient类中的私有字段?
谢谢。
答案 0 :(得分:6)
并非没有为您的Date
课程添加一个getter。这是将字段设为私有的点的一部分。
答案 1 :(得分:1)
您正试图破坏数据封装概念。 private
个字段/方法只能在类中本地访问,并且不可用于其他类。
添加访问者方法,例如getMonthAndadte()
要在monthAndDate
类中返回Date
值。
答案 2 :(得分:1)
注意:您应该避免使用标准JDK已使用的名称来命名类。
要回答您的问题,您只需在Date类中提供一个getter:
public class Date{
private String monthAndDate;
public Date(String inputMonthAndDate){
monthAndDate = inputMonthAndDate;
}
public String getMonthAndDate(){
return monthAndDate;
}
}
您现在可以致电:
String s = someDate.getMonthDate();
答案 3 :(得分:1)
您可以通过反射轻松完成此操作,但只有当Date
超出您的控制范围,没有合法的API才能执行此操作时,建议您这样做,并且您在考虑所有后果后必须完成此操作。
答案 4 :(得分:1)
访问您的私人字段的示例方案在此代码中:
public class Date
{
private String monthAndDate;
public Date(String inputMonthAndDate)
{
monthAndDate = inputMonthAndDate;
}
public String getMonthAndDate()
{
return monthAndDate;
}
}
public class Parent
{
private yetAnotherField;
Parent()
{
this.yetAnotherField = (new Date("some string")).getMonthAndDate();
}
}
答案 5 :(得分:1)
有两种方法:
- 在字段Getter
中使用monthAndDate
并在需要访问此字段的类中使用Composition
原则。
- 使用Reflection
,这对初学者来说会更难一些。
答案 6 :(得分:1)
不是private
但你考虑过使用“包私有”吗?如果某些东西是“包私有”,那么它只能被同一个包中的其他类看到。令人困惑的是它没有关键字......它是默认范围。
答案 7 :(得分:0)
您可以使用Reflection但提供getter方法将是更好的解决方案。
答案 8 :(得分:0)
使用反射:
final Field field = Date.class.getDeclaredField("monthAndDate");
field.setAccessible(true);
final String monthAndDate = (String)field.get(date);
(有
Date date = new Date("anything");
)