我想用来JavaCompiler
动态创建一些类.
我找到了javax.tools
包的源代码,但是没有实现; 互联网上的一些帖子说它依赖于tools.jar
,我不确定是否tools.jar
与JRE有关.
那么,我可以在没有安装JDK的JRE环境中运行程序吗?
另一个问题,即实现细节JavaCompiler
是什么,是创建一个新的进程来调用javac
命令?
谢谢
我正在尝试使用 JetBrains Rider IDE 使用 WPF 进行 Windows 开发。(我正处于 30 天试用期的第 1 天。)
因此,当我运行(调试)我的应用程序时,我注意到屏幕上有些东西不对。
我从 Rider 中打开相应的 XAML 文件,我以一种应该会产生很大视觉差异的方式对其进行编辑,但在我的应用程序的屏幕上没有任何反应。我从 Rider 中保存了 XAML 文件,但我的应用程序仍然没有任何反应。我重新启动我的应用程序,然后我看到了更改。
使用 Visual Studio,每次更改 XAML 时都会热重载它,因此我无需重新启动应用程序就可以查看我在做什么。这是越野车,但总比没有好。
所以:
Rider 有这个功能吗?
是否有一些魔术可以实现它?
我注意到在 Xamarin 的上下文中,Rider 似乎支持 XAML 的热重载,但我正在使用 WPF,所以我认为这与我无关;我的假设正确吗?
DotNet 中是否有任何解决方案可以以编程方式完成相同的事情?(例如,我单击我的应用程序上的一个按钮,我的应用程序以某种方式重新加载其 XAML。)
我有一个用C#编写的Windows应用程序,需要从数据库加载250,000行并提供"键入时搜索"功能,这意味着只要用户在文本框中输入内容,应用程序就需要搜索所有250,000条记录(其中是btw,单列,每行1000个字符)使用like
搜索并显示找到的记录.
我遵循的方法是:
1-该应用程序将所有记录加载到一个类型中 List<EmployeeData>
while (objSQLReader.Read())
{
lstEmployees.Add(new EmployeesData(
Convert.ToInt32(objSQLReader.GetString(0)),
objSQLReader.GetString(1),
objSQLReader.GetString(2)));
}
Run Code Online (Sandbox Code Playgroud)
2-在TextChanged事件中,使用LINQ
,我搜索(与正则表达式的组合)并将其附加IEnumerable<EmployeesData>
到处于虚拟模式的ListView.
String strPattern = "(?=.*wood*)(?=.*james*)";
IEnumerable<EmployeesData> lstFoundItems = from objEmployee in lstEmployees
where Regex.IsMatch(Employee.SearchStr, strPattern, RegexOptions.IgnoreCase)
select objEmployee;
lstFoundEmployees = lstFoundItems;
Run Code Online (Sandbox Code Playgroud)
处理3-4 RetrieveVirtualItem事件以显示ListView中的项目以显示该项目.
e.Item = new ListViewItem(new String[] {
lstFoundEmployees.ElementAt(e.ItemIndex).DateProjectTaskClient,
e.ItemIndex.ToString() });
Run Code Online (Sandbox Code Playgroud)
虽然lstEmployees
从SQL Server加载列表的加载速度相对较快(1.5秒),但要在TextChanged上搜索,使用LINQ搜索需要7分钟以上.通过执行LIKE
搜索直接搜索SQL Server 只需不到7秒.
我在这做错了什么?如何更快地进行此搜索(不超过2秒)?这是我的客户的要求.所以,任何帮助都非常感谢.请帮忙...
看看这个片段:
List<Integer> c = new ArrayList<>();
Map<String,Boolean> m = new HashMap<>();
if( c == m ) //no error here! WHY?
{
c = m; //"Incompatible types" error, as expected.
m = c; //"Incompatible types" error, as expected.
}
Run Code Online (Sandbox Code Playgroud)
怎么来c == m
没有错误?
我正在使用jdk1.8.0.20的javac,我没有理由怀疑它忽略了java语言规范,所以这在规范中具有相当绝对的确定性,因此:
规范允许这样的东西有什么意义/目的/用处?
请考虑以下自包含示例:
package bloopers;
import java.lang.annotation.Annotation;
public final class Blooper5
{
interface Converter<T,F>
{
T convert( F from );
}
interface Identifier<T>
{
}
static class ConvertingIdentifier<F,T> implements Identifier<F>
{
ConvertingIdentifier( Converter<T,F> converter )
{
}
}
static final class AnnotationIdentifier
{
Identifier<Annotation> I1 = new ConvertingIdentifier<>(
a -> a.annotationType() );
Identifier<Annotation> I2 = new ConvertingIdentifier<>(
Annotation::annotationType ); //<-- ERROR
Identifier<Annotation> I3 = new ConvertingIdentifier<>(
(Converter<Class<? extends Annotation>,Annotation>)
Annotation::annotationType );
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在下面编译得很好:
javac
从命令行.IntelliJ IDEA
配置为使用javac
编译器.但它无法编译以下内容: …
JUnit 是黑盒测试还是白盒测试?我认为它是白盒,但我不确定。我正在寻找那个,但我找不到明确的答案。即使是简单的讨论也会很有用。
在 Visual Studo 中,如果启用了“启用反编译源导航”选项,并且在没有源代码的某些标识符上选择“转到定义”,您会收到如下对话框:
上述对话框的文本,为了搜索引擎的利益:
重要提示:Visual Studio 包含反编译功能(“反编译器”),可以从二进制代码复制源代码。通过访问和使用反编译器,您同意 Visual Studio 许可条款和下面的反编译器条款。如果您不同意这些合并条款,请勿访问或使用反编译器。
您承认二进制代码和源代码可能受版权法和商标法的保护。在对任何二进制代码使用反编译器之前,您需要首先: (i) 确认管理您使用二进制代码的许可条款不包含禁止您反编译软件的条款;(ii) 从软件所有者处获得反编译二进制代码的许可。
您可以选择是否使用反编译器。对于您使用反编译器违反禁止反编译软件的任何法律或任何软件许可条款的情况,Microsoft 不承担任何责任。
我同意上述所有内容:[是] [否]
问题是,我看到这个对话框的次数比我应该看到的要多。我希望每个用户每次安装 Visual Studio 时只能看到一次;相反,我每个工作日都会看到几次。
这是预期的行为吗?如果不是,可能是什么原因造成的?如果是,如何才能将其永久禁用/规避/挫败/搞砸/黑客入侵?
如何获取PreparedStatement更新的行数?
.getUpdateCount()
返回0.
对于获取executeUpdate
错误:批处理期间发生错误:
必须执行或清除批处理
我的代码:
updTrans = dataSource.getConnection().prepareStatement("update...");
updTrans.setInt(1, Integer.valueOf(transaksjonstatusid));
...
updTrans.addBatch();
upd = updTrans.executeUpdate();
Run Code Online (Sandbox Code Playgroud) 我有一个方法从标准输入读取行并将行写入标准输出.
在JUnit测试中,如何将输入发送到方法,以及如何捕获其输出以便我可以对其进行断言?
我对标题的简短表示歉意,但实际的标题有点太长了。这是实际的长标题:
Equals()
为什么覆盖without时会发出警告GetHashCode()
,而覆盖GetHashCode()
without时却没有警告Equals()
?我还提前道歉,这不是一个“Y 的 X 是什么”类型的问题,它更像是一个“我观察到 X;我错过了什么吗?” 问题类型。
因此,请考虑以下事项:
class A
{
public override bool Equals( object other ) => true; //warning CS0659
}
class B
{
public override int GetHashCode() => 42; //No warning
}
Run Code Online (Sandbox Code Playgroud)
我知道警告 CS0659“类覆盖 Object.Equals(object o) 但不覆盖 Object.GetHashCode()”背后的原因。我不同意这些原因,因为Equals()
对于可变类来说是完全可行的,而这样的类当然永远不能用作哈希映射中的键,因此不能有GetHashCode()
,但我的反对意见是无关紧要的,并且在无论如何,收到不需要的警告从来都不是问题,因为您始终可以禁用它。
然而,当您想到一个您可能会用到的警告,但您却没有收到这样的警告时,这就出现了问题。
这就是class B
上面所演示的。覆盖GetHashCode()
而不覆盖Equals()
几乎肯定是一个严重的错误,但没有任何警告。不是由 C# 编译器执行,也不是由 ReSharper 执行。
有谁知道为什么?
我有什么遗漏的吗?
难道警告确实存在,但我必须知道一些配置魔法才能将其从编译器中剔除?
难道我必须以某种奇怪的方式声明我的班级,比如public
sealed
albino
什么?
没有警告是否有任何正当理由?
编辑
到目前为止,这个问题已经有一些答案,它们几乎都声明了同一件事:没有警告,因为没有违反 和 的GetHashCode() …