public class MyGeneric<T, E> {}
public class Extend1<T, E> extends MyGeneric<T, E> {}
public class Extend2 extends MyGeneric<String, Object> {}
Run Code Online (Sandbox Code Playgroud)
据我所知,上例中的两个子类都是有效的.我想知道Java何时知道在实例化子类时何时定义超类中给出的类型,以及何时它们是实际的类名(即它如何知道T,E不是类名)?
附注,是否允许(即使不常见)为泛型类型使用多个字母?如果(通过计划的某些严重错误)类型与现有类冲突,例如
public class E{}
public class Foo<E>{}
Run Code Online (Sandbox Code Playgroud)
那会发生什么?
编辑:感谢您及时回答.要回答我的第一个问题,Joachim的答案是最有效的.
为了回答这一点,aioobe的答案更加清晰
我目前正在尝试(或计划尝试)编写一个简单的(尽可能)程序来将html文档解析为树.
谷歌搜索后,我发现许多答案说"不要做它已经完成"(或者说是这样的话); 和HTML解析器示例的引用; 还有一篇相当有说服力的文章,说明为什么不应该使用常规表达.但是我没有找到任何关于编写解析器的"正确"方法的指南.(顺便说一句,这是我尝试更多的东西,而不是任何东西,所以我非常喜欢这样做,而不是使用预制的)
我相信我只需通过阅读文档并将标签/文本等添加到树中就可以创建一个有效的XML解析器,每当我点击一个关闭标签时就会升级一个级别(同样,简单,没有花哨的线程或在这个阶段需要效率).但是,对于HTML,并非所有标记都已关闭.
所以我的问题是:你会建议什么作为处理这个问题的方法?我唯一的想法就是以与XML类似的方式对待它,但是有一个标签列表,这些标签不一定都是关闭的条件(例如<p>结束于</ p>或下一个<p >标签).
有没有其他任何(希望更好)的建议?是否有更好的方法完成这项工作?
在处理由前一个dev留给我的项目代码时,我遇到了以下构造
-(NSString *)StringCheckWithString:(NSString *)string{
NSString *string2 = [NSString stringWithFormat:@"%@", string];
if([string2 length] == 0){
return @"none";
}
else {
return string2;
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么你会这样做,它似乎显着过度设计了我,我不明白为什么它这样做(为了清楚,我不明白为什么字符串格式这样,我理解长度检查)
我有一个数据结构,我目前正在使用它ArrayList.我意识到在这个结构中我不希望出现任何重复.我的第一个想法是使用某种形式的集合,但顺序也很重要.经过一些谷歌搜索和搜索收藏文档,我发现LinkedHashSet几乎完成了这项工作.不幸的是,保留顺序的一个主要原因是因为我使用get(int index)ArrayList 的方法进行随机访问,我无法看到任何解决方法.
更简洁 - 我需要一个保留顺序并允许随机访问的集合.到目前为止,我所看到的所有类都没有提供此功能.有没有人知道提供这个的课程,还是我必须自己做?如果是后一种情况,在创建人们都知道的这种结构时会有任何陷阱吗?
(或者,从ArrayList或类似结构中检查和删除重复项的快速简便方法就足够了)
编辑:为了清楚起见,将元素添加到列表中的顺序是重要的,而不是它们彼此比较的顺序
我希望对Django管理界面进行一些修改(具体来说,删除“更改”链接,同时保留“模型名称”作为指向实例更改页面的链接)。我可以通过从管理应用程序复制和粘贴index.html并对模板进行修改来实现此目的,但是我希望仅通过扩展模板来覆盖有问题的部分-但是我不确定如何将其作为模板来实现具有相同的名称。我也对实现这种效果的其他方法持开放态度。(Django 1.7,Python 3.4.1)
我有一个JTable,当点击相应的按钮时,它开始填充在后台继续的文件树步行的结果.这很好用.
然后我决定要对表进行排序.经过一些阅读后,我创建了一个TableRowSorter并设置表来使用它.它似乎工作,但仔细检查后,我注意到几个文件结果不存在.我禁用了分拣机并再次运行程序并且所有文件都存在,再次重新启用分拣机时有些遗漏,但每次丢弃时似乎都是不同的文件.
为了检验这一点,我创建了一个自包含的代码块作为测试(见下文),它代表了JTable代码(事实上,大块直接从现有程序代码中提取).文件树遍历由for循环表示.再次,没有分拣机它完美地工作.但是,当我启用分拣机时(通过取消注释第29行)整个程序冻结,我被告知有一个NullPointerException.
我不知道造成这些问题的原因是什么,事实上它们甚至是相关的.欢迎任何有关错误的想法.
import javax.swing.table.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Sort extends JFrame{
private JTable table;
private DefaultTableModel model;
private TableRowSorter<DefaultTableModel> sorter;
private JButton go;
public Sort(){
super("Sort");
// Create table and model
model = new DefaultTableModel(0, 4);
table = new JTable(model);
// Setup sorting
sorter = new TableRowSorter<DefaultTableModel>(model);
ArrayList<RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>();
sortKeys.add(new RowSorter.SortKey(2, SortOrder.ASCENDING));
sortKeys.add(new RowSorter.SortKey(3, SortOrder.ASCENDING));
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeys);
//table.setRowSorter(sorter);
// Create Scroll Pane
JScrollPane tableScroller = new JScrollPane(table); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个JPanel(好吧,几个)添加到JLayeredPane.但是,当我这样做时,JPanel的paint组件方法似乎没有任何效果.下面是一个例子:
import javax.swing.*;
import java.awt.*;
public class Example {
public static void main(String[] args) {
// This Works as expected
JFrame usingPanel = new JFrame();
JPanel p = new JPanel();
p.add(new BluePanel());
usingPanel.setContentPane(p);
usingPanel.pack();
usingPanel.setVisible(true);
// This makes the frame but does not paint the BluePanel
JFrame usingLayer = new JFrame();
JLayeredPane l = new JLayeredPane();
l.setPreferredSize(new Dimension(200,200));
l.add(new BluePanel(), JLayeredPane.DEFAULT_LAYER);
JPanel p2 = new JPanel();
p2.add(l);
usingLayer.setContentPane(p2);
usingLayer.pack();
usingLayer.setVisible(true);
}
static class BluePanel extends JPanel{
public BluePanel(){
setPreferredSize(new Dimension(200,200)); …Run Code Online (Sandbox Code Playgroud) java ×4
swing ×2
class ×1
collections ×1
django ×1
django-admin ×1
generics ×1
html ×1
html-parsing ×1
ios ×1
jlayeredpane ×1
jtable ×1
list ×1
nsstring ×1
objective-c ×1
parsing ×1
python ×1
set ×1
string ×1
subclassing ×1