我无法访问 Java 中相同类型的私有(private)成员。 我正在分数类型上创建一个方法“add”,但我无法访问其他分数私有(private)变量进行比较。
public Fraction add(Fraction f) {
int add1 = (this.numerator*f.denominator)+(this.denominator*f.numerator);
int add2 = this.denominator*f.denominator;
return createFraction(add1,add2);
}
我应该使用某种反射功能来实现此目的吗?
额外信息:我尚未在接口(interface)上声明私有(private)成员。
额外信息:我不允许在此类上使用 getter 和 setter
额外信息:我无权公开这些字段
最佳答案
您应该在 Fraction
类上创建 getter 和 setter,这样您就可以获取私有(private)变量的值并设置它们。
public class Fraction{
private int numerator;
private int denominator;
public Fraction(final int numerator, final int denominator){
this.numerator = numerator;
this.denominator = denominator;
}
public int getNumerator(){
return this.numerator;
}
public int getDenominator(){
return this.denominator;
}
public void setNumerator(final int numerator){
this.numerator = numerator;
}
public void setDenominator(final int denominator){
this.denominator = denominator;
}
}
然后您可以将代码更改为:
public Fraction add(Fraction f) {
int add1 = (this.numerator*f.getDenominator())+(this.denominator*f.getNumerator());
int add2 = this.denominator*f.getDenominator();
return createFraction(add1,add2); //createFraction can be simply new Fraction(add1, add2);
}
您可以使用Reflection通过使用Field.setAccessible
来获取字段的值,但为字段编写getter会更容易、更清晰。
用法示例:
Field field = f.getClass().getDeclaredField("numerator");
f.setAccessible(true);
int numerator = (int) field.get(f);
您的代码可以更改为:
public Fraction add(Fraction f) throws NoSuchFieldException, IllegalAccessException{
Field fieldNumerator = f.getClass().getDeclaredField("numerator");
fieldNumerator.setAccessible(true);
Field fieldDenominator = f.getClass().getDeclaredField("denominator");
fieldDenominator.setAccessible(true);
final int numerator = (int) fieldNumerator.get(f);
final int denominator = (int) fieldDenominator.get(f);
int add1 = (this.numerator*denominator)+(this.denominator*numerator);
int add2 = this.denominator*denominator;
return createFraction(add1,add2);
}
关于java - 无法访问Java中相同类型的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202983/