Eclipse在编译时给出了一个奇怪的错误

时间:2010-03-31 01:12:53

标签: java eclipse debugging

我有这个函数,它返回一个数据类型InetAddress []

public InetAddress []
lookupAllHostAddr(String host) throws UnknownHostException {
    Name name = null;

    try {
        name = new Name(host);
    }
    catch (TextParseException e) {
        throw new UnknownHostException(host);
    }

    Record [] records = null;
    if (preferV6)
        records = new Lookup(name, Type.AAAA).run();
    if (records == null)
        records = new Lookup(name, Type.A).run();
    if (records == null && !preferV6)
        records = new Lookup(name, Type.AAAA).run();
    if (records == null)
        throw new UnknownHostException(host);

    InetAddress[] array = new InetAddress[records.length];
    for (int i = 0; i < records.length; i++) {
        Record record = records[i];
        if (records[i] instanceof ARecord) {
            ARecord a = (ARecord) records[i];
            array[i] = a.getAddress();
        } else {
            AAAARecord aaaa = (AAAARecord) records[i];
            array[i] = aaaa.getAddress();
        }
    }
    return array;
}

Eclipse抱怨返回类型应该是byte [] []但是当我将返回类型更改为byte [] []时,它会抱怨该函数返回了错误的数据类型。我陷入了困境。有谁知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

这段代码非常令人困惑。如果不了解你的其他课程,就不可能知道发生了什么。

有很多不喜欢这个代码。如果我看到一组依赖于“instanceof”的对象进行正确操作的循环,我不禁认为多态将是一个更好的解决方案。

您对new Lookup(name, type).run()的调用让我想到了Runnable和Threads,但这不是您正在做的事情。

看起来你正在尝试进行DNS服务器查找。我想知道是否还没有可用的东西可以提供帮助(例如,Apache James)。

更新:

我试着采用你的方法让它发挥作用。我删除了我没有的东西,把问题简化为最简单的事情。它具有您的方法签名和相同的返回类型。这个更简单的例子有效。如果有问题,那就是我被剥离的东西。对不起,我的帮助不大。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class HostLookup
{
    public static void main(String[] args)
    {
        try
        {
            HostLookup lookup = new HostLookup();

            String host = ((args.length > 0) ? args[0] : "localhost");
            InetAddress [] allHostAddresses = lookup.lookupAllHostAddr(host);
            for (InetAddress address : allHostAddresses)
            {
                System.out.println("address: " + address);
            }
        }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
    }

    public InetAddress [] lookupAllHostAddr(String host) throws UnknownHostException
    {
        InetAddress[] array = InetAddress.getAllByName(host);

        return array;
    }
}

答案 1 :(得分:1)

基于lookupAllHostAddr的一点研究揭示了以下内容:

sun.net.spi.nameservice.NameService接口已更改 对于JDK 6而言,Java源代码无法实现 声明一个可以实现旧版本或新版本的类 (lookupAllHostAddr方法的返回类型已更改 byte[][]InetAddress[])。 使用JDK 6必须解决这个问题!