⑴ java方法参数中的泛型通配符要怎么理解
泛型可以用"<T>"代表,任意类型的。
解释: “<T>”是泛型的默认值,可以被任意类型所代替,如:
List<String> list = new ArayList<String>();这个就定义了一个String类型的”泛型“集合,那么T的类型就是字符串。
List<T> list = new ArayList<T>();
可以赋值给list:list.add("StringBatch");
可以获取到list的值:list.get(0),结果就是”StringBatch“;
这个时候T的类型也是String。也就是说T是动态的,可以被任意指定类型。
⑵ 文件删除时支持通配符 Java
package org.example;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileUtil {
/**
* 删除指定目录下符合指定<param>pattern</param>的文件或目录
* @param path
* 指定的目录
* @param pattern
* 要删除的目标,可以含通配符(*)
* 如:x*d\*.bak,为指定目录下以x开头d结尾的目录下的所有bak文件
* @return
* true, 没有错误;false, 发生了错误
*/
public static boolean delete(String path, String pattern) throws Exception {
if( path == null || pattern == null )
throw new IllegalArgumentException("参数为空");
boolean result = true;
File root = new File(path);
if( !root.isDirectory() || !root.exists() )
throw new IllegalArgumentException("不是目录或者目录不存在");
List<File> folderBuffer = new ArrayList<File>();
folderBuffer.add(root);
String[] ps = pattern.split("\\" + File.separator);
for(int i = 0; i < ps.length; i ++) {
List<File> tmpList = new ArrayList<File>();
while(folderBuffer.size() > 0) {
File folder = folderBuffer.remove(0);
List<File> fileMatched = applyPattern(folder, ps[i]);
tmpList.addAll(fileMatched);
}
folderBuffer.addAll(tmpList);
if( folderBuffer.size() == 0 )
return true;
}
for(int i = 0; i < folderBuffer.size(); i ++) {
boolean r = deleteFile(folderBuffer.get(i));
if( !r )
return r;
}
return result;
}
private static boolean deleteFile(File f) {
trace("DELETE: " + f.getPath());
if( f.isFile() )
return f.delete();
// 目录也有可能满足通配符!
// 是否执行删除带有文件的目录?自己判断,这里直接删,不管成功失败
return f.delete();
}
/**
* 将含通配符(*)的字符串转变成正则表达式
* @param pattern
* @return
* @remark
* 这里做得比较简单,只是替换了"."和"*",实际情况可能还有其他字符需要替换
*/
private static Pattern createPattern(String pattern) {
String _pattern = pattern.replaceAll("\\.", "\\\\.").replaceAll("\\*", ".*");
Pattern p = Pattern.compile(_pattern, Pattern.CASE_INSENSITIVE);
return p;
}
private static List<File> applyPattern(File folder, String pattern) {
List<File> list = new ArrayList<File>();
if( folder == null || folder.isFile() || pattern == null )
return list; // 空List
Pattern p = createPattern(pattern);
File[] files = folder.listFiles();
for(int i = 0; i < files.length; i ++) {
File file = files[i];
String name = file.getName();
Matcher m = p.matcher(name);
if( m.matches() ) {
list.add(file);
trace("[ M] Folder: " + folder + ", Pattern: " + pattern +
", File: " + name + " <-----Matched----");
}
else {
trace("[NM] Folder: " + folder + ", Pattern: " + pattern +
", File: " + name);
}
}
return list;
}
private static void trace(String message) {
System.out.println(message);
}
public static void main(String[] args) throws Exception {
trace("警告:请按照您自己的要求修改程序,风险自负。");
FileUtil.delete("F:\\temp", "*x1\\*.exe");
}
}
⑶ Java中什么是通配符
java中的通配符由?表示,应用场景是在方法的形参上使用,为了弥补泛型机制带来的参数传递问题,主要有三种通配符分类 无界通配:?,子类限定:? extends Object,父类限定:? super Integer。
⑷ Java中通配符可以用在哪些地方
第一java关键字中没有通配符。第二,java的regexp包可以用通配符去解析字符串。1.5以后,这此特性已经直接集成到string类中了。
⑸ java 通配符匹配字符串
我记得在String类中有一个matches(reg)方法,可以加正则表达式判定是否符合要求,
String string ="110_1565121651.tmp";
boolean flag=string.matches("110_[0-9]+\\.tmp");
System.out.println("flag="+flag);
试下是不是这版样,我了是初学权者,如不对,请见谅。
⑹ java 实现字符串通配符
^private static boolean wildMatch(String pattern, String str) {
pattern = toJavaPattern(pattern);
return java.util.regex.Pattern.matches(pattern, str);
}
private static String toJavaPattern(String pattern) {
String result = "^";
char metachar[] = { '$', '^', '[', ']', '(', ')', '{', '|', '*', '+', '?', '.', '//' };
for (int i = 0; i < pattern.length(); i++) {
char ch = pattern.charAt(i);
boolean isMeta = false;
for (int j = 0; j < metachar.length; j++) {
if (ch == metachar[j]) {
result += "/" + ch;
isMeta = true;
break;
}
}
if (!isMeta) {
if (ch == '*') {
result += ".*";
} else {
result += ch;
}
}
}
result += "$";
return result;
}
public static void main(String[] args) {
test("*", "toto");
test("toto.java", "tutu.java");
test("12345", "1234");
test("1234", "12345");
test("*f", "");
test("***", "toto");
test("*.java", "toto.");
test("*.java", "toto.jav");
test("*.java", "toto.java");
test("abc*", "");
test("a*c", "abbbbbccccc");
test("abc*xyz", "abcxxxyz");
test("*xyz", "abcxxxyz");
test("abc**xyz", "abcxxxyz");
test("abc**x", "abcxxx");
test("*a*b*c**x", "aaabcxxx");
test("abc*x*yz", "abcxxxyz");
test("abc*x*yz*", "abcxxxyz");
test("a*b*c*x*yf*z*", "aabbccxxxeeyffz");
test("a*b*c*x*yf*zze", "aabbccxxxeeyffz");
test("a*b*c*x*yf*ze", "aabbccxxxeeyffz");
test("a*b*c*x*yf*ze", "aabbccxxxeeyfze");
test("*LogServerInterface*.java", "_LogServerInterfaceImpl.java");
test("abc*xyz", "abcxyxyz");
}
private static void test(String pattern, String str) {
System.out.println(pattern+" " + str + " =>> " + wildMatch(pattern, str));
}
⑺ java里的泛型和通配符
解释这样的,希望可以被采纳为答案:
1.先解释最中间的括号:某一个对象A继承了K这个类,某一个对象B继承V这个类
2. Map.Entry是map中的一个方法,该方法可以返回一个对象的集合,那么现在得这个集合就是,A,B所组成的集合
3.iterator迭代器类似于for循环,将A,B这个集合迭代出来,取出A,B单独的对象
希望我的回答你满意。
⑻ java通配符类型
如果是类引入的通配符,那么指的是”*“,
如:import java.util.*;表示的是引入util包下的所有类;
如果是查找的通配符,那么指的是”*“,
如:*.java;表示的是查找后缀为java的所有文件;
如果是泛型中的通配符,那么指的是”<T>“;
如:List<T> list = new ArayList<T>();表示定义了一个通配的list对象,可以代表任何对象的list。