如何从另一个类获取私有字段?

时间:2012-11-16 17:28:05

标签: java

我有一个名为date的课程:

public class Date{
    private String monthAndDate;
    public Date(String inputMonthAndDate){
        monthAndDate = inputMonthAndDate;
    }
}

我有另一个名为Patient的课程。是否可以从Date类获取monthAndDate的语法并将其传递给Patient类中的私有字段?

谢谢。

9 个答案:

答案 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");