2012-11-16 55 views
0

我有一个类称为日期:如何从另一个班级获得私人领域?

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

我叫病人另一个类。是否有可能从Date类中获取monthAndDate的语法并将其传递给类Patient中的私有字段?

谢谢。

+1

如果你想从另一个类访问它们,你为什么让他们私人摆在首位? – NullUserException

回答

1

注意:您应该避免命名具有标准JDK使用名称的类。

要回答你的问题,你可以简单地在你的日期类提供一个getter:

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

现在,您可以拨打:

String s = someDate.getMonthDate(); 
6

无需为您的Date类添加吸气剂。这是的一部分,使字段私有。

+0

是啊......我只是困惑。对不起,问这个问题。 :P –

1

您试图违反数据封装概念。 private字段/方法只能在本地在类中访问,并且不会被其他类使用。

添加访问器方法,例如getMonthAndadte()返回Date类中的monthAndDate值。

1

您可以轻松地反射做到这一点,但是这将只有在Date不受您的控制,没有合法的API来执行此操作,并且您在考虑到所有后果后绝对必须采取措施的情况下才能推荐。

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(); 
    } 
} 
1

2的方式来做到这一点:

-使用Getter现场monthAndDate和类使用Composition原则需要访问该字段。

-使用Reflection,这对初学者来说会有些困难。

+0

反思会起作用,但那几乎肯定是一个糟糕的主意。反射只能用于测试(如果需要),元工具和高级库,它们可以自动执行任务。 – ArtB

+0

@ArtB我刚刚告诉OP如何访问它,我不推荐它。看到我的第一点,这是一个合法的方式... –

+0

哦,我明白,并假设你做得很好,但我只是想确保原始提问者意识到这是一个强烈的不鼓励的方法。 – ArtB

1

不与private但你有没有考虑使用“包私人”?如果某些东西是“私人包装”,那么它只能被同一包装中的其他类所看到。令人困惑的是它没有关键字......这是默认范围。

0

你可以使用Reflection,但提供一个getter方法将是更好的解决方案。

0

使用反射:

final Field field = Date.class.getDeclaredField("monthAndDate"); 
field.setAccessible(true); 

final String monthAndDate = (String)field.get(date); 

(与

Date date = new Date("anything"); 

+0

由于最初声明为'private',所以你不需要在该字段上先设置'setAccessible()'吗? – ArtB

+0

@ArtB:是的,你说得对:固定 – Illyr