Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java中接口的ArrayList中拉出某些对象?_Java_Arraylist - Fatal编程技术网

从Java中接口的ArrayList中拉出某些对象?

从Java中接口的ArrayList中拉出某些对象?,java,arraylist,Java,Arraylist,我需要从由接口键入的ArrayList中的几个对象调用一个方法(这里我们称之为接口) arraylistobj=newarraylist(); obj.stream().forEachOrdered((o)->{ 如果(/*如果o扩展了ObjectA,则运行下一行*/){ o、 methodCallNotInTheInterface(); } }); 我的问题是,o只能看到接口的方法和变量,其他什么都看不到。我想你可能在寻找关键词 if (o instanecof ObjectA) { ...

我需要从由接口键入的
ArrayList
中的几个对象调用一个方法(这里我们称之为接口)

arraylistobj=newarraylist();
obj.stream().forEachOrdered((o)->{
如果(/*如果o扩展了ObjectA,则运行下一行*/){
o、 methodCallNotInTheInterface();
}
});

我的问题是,
o
只能看到接口的方法和变量,其他什么都看不到。

我想你可能在寻找关键词

if (o instanecof ObjectA) { ...}

也就是说,您的设计可能不应该有一个未实现的方法,如果出于某种原因,它确实有这样的方法,请让它抛出一个异常(
NotImplementedException
)。

我想您可能正在寻找关键字

if (o instanecof ObjectA) { ...}
也就是说,您的设计可能不应该有一个未实现的方法,如果出于某种原因,它确实有这样的方法,请让它抛出一个异常(
NotImplementedException
)。

您可以使用操作符来确定对象的类型是否正确:

List<Interface> obj = new ArrayList<>();
obj.stream().forEachOrdered(o -> {
    if (o instanceof ObjectA) {
        ((ObjectA) o).methodCallNotInTheInterface();
    }
});
List obj=new ArrayList();
obj.stream().forEachOrdered(o->{
if(对象A的o实例){
((ObjectA)o).methodCallNotInInterface();
}
});
请注意,如果
o
为空,则
instanceof
也会返回
false
,因此无需检查该值。

您可以使用运算符来确定对象的类型是否正确:

List<Interface> obj = new ArrayList<>();
obj.stream().forEachOrdered(o -> {
    if (o instanceof ObjectA) {
        ((ObjectA) o).methodCallNotInTheInterface();
    }
});
List obj=new ArrayList();
obj.stream().forEachOrdered(o->{
if(对象A的o实例){
((ObjectA)o).methodCallNotInInterface();
}
});

请注意,如果
o
为空,则
instanceof
也会返回
false
,因此无需检查该值。

首先检查
o
的类型:

if (o instanecof ObjectA)
然后将
o
转换为键入
ObjectA

((ObjectA)o).method();

首先检查
o
的类型:

if (o instanecof ObjectA)
然后将
o
转换为键入
ObjectA

((ObjectA)o).method();

在使用流时,可以使用谓词过滤所需的值,然后对过滤后的值应用函数。此函数只需将值强制转换为所需的类

考虑以下数字列表:

List<Number> list = new ArrayList<>(Arrays.asList(1, new BigDecimal("2.22"), 3l));

在使用流时,可以使用谓词过滤所需的值,然后对过滤后的值应用函数。此函数只需将值强制转换为所需的类

考虑以下数字列表:

List<Number> list = new ArrayList<>(Arrays.asList(1, new BigDecimal("2.22"), 3l));


构造应该是
arraylistobj=newarraylist()。(不确定它是否回答了这个问题,还没有真正研究过它)我正在使用Java1.8,第二个是隐含的,不再需要。但是感谢您尝试帮助^-^
arraylistobj=newarraylist()在Java 8中生成编译警告。你应该像@amit建议的那样使用
(菱形运算符)。因为你使用的是接口(一件好事),所以你应该
列出
,而不是
数组列表
type@AntonMalyshev你将如何编写循环(嗯?;)构造应该是
arraylistobj=newarraylist()。(不确定它是否回答了这个问题,还没有真正研究过它)我正在使用Java1.8,第二个是隐含的,不再需要。但是感谢您尝试帮助^-^
arraylistobj=newarraylist()在Java 8中生成编译警告。你应该像@amit建议的那样使用
(菱形运算符)。因为你使用的是接口(一件好事),所以你应该
列出
,而不是
数组列表
type@AntonMalyshev你将如何编写循环(嗯?;)关于代码气味链接,我的问题是,o是一个对象,它实现了ArrayList被键入到的接口。对o的任何方法调用都只返回在该接口中声明的方法,而不返回该对象拥有的其他方法。这不应该引起“代码气味”对吗?@JoshuaPelino你是说接口有一个方法(比如说
foo()
,和
ObjectA
,它们恰好扩展了一个
超类,这个超类也有
foo()
,你想要
超类
foo()
要调用吗?如果我没记错的话,在java8中,您无论如何都需要在
ObjectA
中解析它。不,接口有一个方法foo(),我正试图调用方法bar()当然是ObjectA。@JoshuaPelino基本上,如果你有一个接口,你需要知道实现它的特定类,为了使用接口不支持的一些功能,这是一种代码气味……我在代码气味链接上的问题是,o是一个实现ArrayList被键入到的接口的对象。任何方法调用o只返回在该接口中声明的方法,而不返回object拥有的其他方法。这不应该导致“代码气味”对吗?@JoshuaPelino您的意思是该接口有一个方法(比如
foo()
,和
ObjectA
,它们恰好扩展了一个也有
foo()的
超类
,你想调用
超类
foo()
?如果我没记错的话,在java8中,你需要在
ObjectA
中解析它。不,接口有一个方法foo(),我试图调用方法栏()基本上,如果你有一个接口,并且你需要知道实现它的特定类,为了使用一些接口不支持的功能,这是一种代码味道……这样就解决了它,我的问题最终变得更愚蠢。(我忘了导入那个对象)这就是为什么我之前尝试这个方法时,它不起作用,我认为我有错误的语法。谢谢你,尽管你让我更仔细地查看我的代码。这样就解决了它,我的问题最终变得更愚蠢。(我忘了我的答案。)