构造函数不可见

时间:2013-04-08 18:41:28

标签: java android override

我正在开发一个使用ScanResult对象的Android应用程序。该对象采用以下形式:

[SSID: __mynetwork__, BSSID: 00:0e:2e:ae:4e:85, capabilities: [WPA-PSK-TKIP][ESS], level: -69, frequency: 2457, timestamp: 117455824743]

我试图通过创建我自己的扩展equals()的类来覆盖此类的ScanResult方法:

public class MyScanResult extends ScanResult {

    public MyScanResult() {
        super();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (!(o instanceof ScanResult))
            return false;

        ScanResult obj = (ScanResult) obj;
        if (!BSSID.equals(obj.BSSID))
            return false;
        if (!SSID.equals(obj.SSID))
            return false;
        if (!capabilities.equals(obj.capabilities))
            return false;
        if (frequency != obj.frequency)
            return false;
        if (level != obj.level)
            return false;

        return true;
    }

}

但是当我尝试这个时,我收到以下错误:The constructor ScanResult() is not visible。我该怎么解决这个问题呢?

2 个答案:

答案 0 :(得分:5)

ScanResult的公共构造函数签名是:

public ScanResult(String SSID, String BSSID, String caps, int level, int frequency) 

您需要使用匹配参数

调用超类

答案 1 :(得分:0)

显然很好的方式

ScanResult需要参数:

public ScanResult(  String SSID, 
                    String BSSID,
                    String caps,
                    int level,
                    int frequency)

您可以查看课程定义here

丑陋的方式

正如你所说,显然ScanResult是私人的。 This answer告诉您使用反射来获取构造函数。

可能唯一的方式

没人知道这是怎么发生的(实际上很奇怪)。但是有一个改变来解决它。点击here链接,将类复制到您的项目中(当然更改它的包),然后让MyScanResult继承此项。 Android是开源的,尽管这个类可能会在未来发生变化,但您确保现在可以使用它。然后,如果您需要原始类,则可以尝试使用ScanResult转换新的(android.net.wifi.ScanResult)scanResult