我正在尝试由开发人员自行决定重新构建OOP方法进行移动验证。我提出的概念是允许接口操纵类。如果该类实现了该接口,则将执行verify方法。
我所面临的问题,因为我只习惯于使用不太强类型的语言(PHP)进行编程,那就是如何从扩展当前类的类中获取受保护的变量。
_areaCodes.stream().forEach(o -> {
try {
int prefix = Integer.parseInt(this._mobileNumber.charAt(0), this._mobileNumber.charAt(1));
} catch (Exception e) {}
});
这行代码现在给我一个错误
_mobileNumber无法解析或不是字段
这是我的完整代码,这里是an example,是我在PHP中用Java尝试实现的相同概念。
import java.util.ArrayList;
interface Verification
{
public void initVerification();
}
class AreaCode
{
private int _code;
private String _country;
public AreaCode(int code, String country)
{
this._code = code;
this._country = country;
}
public int getAreaCode() { return this._code; }
public String getAreaCountry() { return this._country; }
}
class VerificationHandler
{
private ArrayList<AreaCode> _areaCodes = new ArrayList<AreaCode>() {{
this.add(new AreaCode(44, "UNITED KINGDOM"));
this.add(new AreaCode(91, "INDIA"));
}};
public void initVerification()
{
if(this instanceof Verification) {
this.verify();
}
}
protected void verify()
{
_areaCodes.stream().forEach(o -> {
try {
int prefix = Integer.parseInt(this._mobileNumber.charAt(0), this._mobileNumber.charAt(1));
} catch (Exception e) {}
});
}
}
class Main extends VerificationHandler implements Verification {
protected String _mobileNumber = "+447435217761";
}
public class Hack1337 { public static void main(String[] args) { new Main(); } }
如何在扩展另一个类的类中检索变量,即:
class A { public String getB() { return this.b; } }
class B extends A { protected String b = 'A should get this'; }
B b = new B().getB();
答案 0 :(得分:1)
只有类B
或子类B
的实例可以直接访问b
实例变量(除非您在其中将A
强制转换为B
A
类的主体,这是一种不好的做法)。
您可以通过覆盖A
来授予类getB()
对该值的只读访问权限:
class B extends A
{
protected String b = 'A should get this';
@Override
public String getB() {
return this.b;
}
}
并且您可能还想使getB()
类中的A
方法抽象(这意味着使类A
抽象):
abstract class A
{
public abstract String getB();
}
仅当期望A
的不同子类返回getB()
中的不同内容时,这才有意义。否则,您也可以将b
变量移至基类A
。