- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注意:我真的不知道如何提出我的问题,所以我的标题可能没有任何公正。
我开始编写一个 RSS 解析器。我希望用户能够指定他们想要信息的标签,并且我的 parseInnerXmlByTag 方法将返回该类型的 ArrayList。问题是不同的标签具有不同的属性,这意味着我必须为每种类型的标签(“item”、“channel”、“entry”...)创建类。所以我决定创建一个空的 RSSElement 类。然后我创建了一个扩展它的 RSSItem 类。所以我的 parseInnerXmlByTag 现在返回一个 ArrayList < RSSElements >。 我的目标是让用户仅调用一个方法来指定他们想要的标签信息。假设他们指定“item”,该方法应返回 ArrayList < RSSItem >。
但是这样的行不起作用,因为这两种类型在技术上没有关系:
ArrayList<RSSElement> data = (method returning ArrayList<RSSItem>)
我无法理解通配符和子类型,所以我想知道是否有人可以检查我到目前为止所掌握的内容并告诉我您的想法。这是我的代码
public class RSSParser {
public static ArrayList<RSSElement> parseInnerXmlByTag(String in, String tag)
throws XmlPullParserException, IOException{
ArrayList<RSSElement> data = new ArrayList<>();
StringReader input = new StringReader(in);
try{
XmlPullParser parser = Xml.newPullParser();
parser.setInput(input);
parser.nextTag();
data = readFeed(parser, tag);
}
finally {
input.close();
return data;
}
}
/*
Returns an ArrayList of parsed RSSElements specified by "tag"
*/
private static ArrayList<RSSElement> readFeed(XmlPullParser parser, String tag)
throws XmlPullParserException, IOException{
ArrayList<RSSElement> data = new ArrayList<>();
int event = parser.getEventType();
//Parse until input is consumed
while(event != XmlPullParser.END_DOCUMENT){
switch (event){
case XmlPullParser.START_TAG:
if(parser.getName().equalsIgnoreCase(tag)){
RSSItem item = RSSItem.processItem(parser);
data.add(RSSItem.processItem(parser));
}
break;
}
event = parser.next();
}
return data;
}
public static abstract class RSSElement{
//Private constructor prevents instantiation
private RSSElement(){}
}
public static class RSSItem extends RSSElement{
String title = "";
String description = "";
public RSSItem(String t, String d){
title = t;
description = d;
}
@Override
public String toString() {...}
/*
Parses an RSS item tag into a container RSSItem (ONLY GRABS TITLE RIGHT NOW)
*/
protected static RSSItem processItem(XmlPullParser parser)
throws XmlPullParserException, IOException{
String currentTag = "";
String title = "";
/*
while end tag hasn't been reached yet:
reaching the end tag means parser.getEventType == END_TAG && parser.getName = tag
*/
while(!(parser.next() == XmlPullParser.END_TAG && parser.getName().equalsIgnoreCase("item"))){
Log.i("rssparser", "process entry");
if(parser.getEventType() == XmlPullParser.START_TAG){
currentTag = parser.getName();
}
else if(parser.getEventType() == XmlPullParser.TEXT && currentTag.equalsIgnoreCase("title")){
title = parser.getText();
break;
}
}
return new RSSItem(title, description);
}
}
}
现在此代码已完成并返回 ArrayList。我还知道它根据我的日志正确解析 RSSItems。 但这是我使用它的地方(也就是我在这里发帖的原因)
@Override
public void onResponse(String response){
ArrayList<? extends RSSParser.RSSElement> items = null;
try {
items = RSSParser.parseInnerXmlByTag(response, "entry");
}...
if(items != null) {
for(int i = 0; i < items.size(); i++){
//****DOESNT WORK****
redditOutputTextView.append(items.get(i).title + "\n");
}
}
else redditOutputTextView.setText("Items null");
}
那一行显然无法工作,因为它不知道它有一个 RSSItems 数组。所以希望有人能弄清楚我正在尝试做什么并提出一些建议。
最佳答案
您能否替换以下代码片段:
//****DOESNT WORK****
redditOutputTextView.append(items.get(i).title + "\n");
通过以下声明:
//****WORKS****
Object obj=items.get(i);
if(obj instanceof RSSItem){
RSSItem rssItem = (RSSItem)obj;
redditOutputTextView.append(rssItem .title + "\n");
}
看到结果了吗?
关于java - 如何将 ArrayList<SubClass> 作为 ArrayList<BaseClass> 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494601/
在我的游戏中,我有一个 Loot 基类,它具有对任何可以被玩家捡起并存储在他的元素栏中的东西通用的方法。这将包括药水、设备、弹药等。我可以装备箭,但不能装备药水。所以 Arrow 将是 Ammo 的一
有 class BaseClass implements IData (); class ChildClassA() extends BaseClass; class ChildClassB() ex
例如,在 vanilla JS 中我可以轻松地执行以下操作: class BaseClass extends React.Component { ... } class Foo extends Bas
我正在自动化一个由多个独立应用程序组成的环境。在某些时候,我决定将每个应用程序定义为一个类并将其保存为单独的文件是最有意义的。 我现在拥有的: 包含 *py 文件的目录,其中每个文件为单个应用程序定义
我有一个基类和许多子类。在每个子类中,我都使用对象 A - 因此我将它放在基类中。在一半的子类中,我使用对象 B,因此我没有将 B 放在基类中。我希望我的基类包含尽可能多的功能,因此如果定义了对象 B
我有: class BASE{ public: virtual void func1() = 0; }; 然后我有一些派生类,比如: class Derived1 : public BASE{
(抱歉标题模糊) 我有一个带有各种派生类 D1、D2 等的基类 B。 另外还有一个模板 template Storage; 现在每个派生类都有不同版本的存储类 class D1 : public c
请考虑以下类别: public interface BaseInterface { void method1(); void method2(); void method3()
我无法在具有 2 个输入引脚的 BaseClasses 中找到合适的渲染器类 - 一个用于视频,一个用于音频。有人可以推荐/提供一些代码吗? 问候多米尼克 最佳答案 CBaseRenderer cla
我正在学习一门新的 C++ 语言,其中使用了 Java 中使用的知识 not JavaScript .我正在尝试创建一个名为 Command 的父类派生类 CmdHelp .在 Java 中我会制作一
基本上我有一个名为 Asset 的类,它包含我系统中某个 Asset 的所有信息。这可能会变得相当大( Assets 有缩略图、文件名、元数据、评级、评论等)。 在我的结果页面上,我列出了所有符合特定
我正在尝试创建一个简单的元素“ list ”,就像在任何角色扮演游戏中一样。我制作了非常基本的类,它们具有属性。 无论如何,我有一个基类 item从那里继承的是weapon . item具有也在 we
我即将为我的 Razor 组件创建一个基类。 这个 Base-Class 看起来像: public abstract class ExampleBase : ComponentBase { p
我正在开发一款可以追溯到很久以前的软件产品。我们源代码的一部分是构建基类的项目。据推测,这是一个随 Windows SDK 一起提供的项目,用于开发引用 DirectShow 的应用程序。 不幸的是,
Internet 上有很多关于在覆盖 Equals 时如何覆盖 GetHashCode() 的信息。但是,所有这些示例都是关于包含一些可以生成哈希的字段的类。我试图找到的是一个很好的 GetHashC
我有很多类都继承自一个基类——实际上它只是一个允许序列化的接口(interface)包装器: public abstract class VoucherRuleBase : IRule{ pu
我的 java 程序中有一系列类,如下所示: src | |- BaseCost |- com.jdoe.nationalcosts |- EntryTicketCost |- Fli
编辑:这是我的错,因为还有另一个 Foo潜伏的定义让我对Foo<>感到困惑定义。 在下面的代码中,Foo是 Bar 的基类对吧? 那为什么编译器会在 .BaseType 下划线呢?部分并说“给定的表达
我有一个名为 GLObject 的基类,具有以下 header : class GLObject{ public: GLObject(float width = 0.0, fl
命名基类的推荐方法是什么?是在类型名称前加上“Base”或“Abstract”还是我们只在其后缀“Base”? 考虑以下几点: 类型:ViewModel 例如MainViewModel、ReportV
我是一名优秀的程序员,十分优秀!