我有这个函数,它返回一个数据类型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 [] []时,它会抱怨该函数返回了错误的数据类型。我陷入了困境。有谁知道这里发生了什么?
答案 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必须解决这个问题!