请考虑以下代码:
public Object getClone(Cloneable a) throws TotallyFooException {
if (a == null) {
throw new TotallyFooException();
}
else {
try {
return a.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
//cant be reached, in for syntax
return null;
}
Run Code Online (Sandbox Code Playgroud)
这return null;是必要的,因为可能会捕获异常,但是在这种情况下,因为我们已经检查它是否为null(并假设我们知道我们调用的类支持克隆)所以我们知道try语句永远不会失败.
在最后放入额外的return语句只是为了满足语法并避免编译错误(使用注释解释它不会达到)是不好的做法,或者是否有更好的方法来编写这样的东西以便额外的返回声明是不必要的?
我正在创建一个将在WPF项目和.NET Core项目中使用的类库.我正在尝试使用我的应用程序获取机器的名称.
在.NET Core和WPF应用程序中,我都可以使用Environment.MachineName值.但是在我的.NET标准类库中我不能.
我收到以下错误:
'Environment'不包含'MachineName'的定义
我试着做这个问题的答案,但是当我尝试添加时,System.Windows.Networking.Connectivity.NetworkInformation.GetHostNames()我得到以下错误:
当前上下文中不存在名称"Windows"
我认为这仅适用于Windows 10 Universal Apps?无论哪种方式,我宁愿采用独立于平台的方式获取机器名称(这种方式似乎只适用于Windows机器)
我想在用户单击允许他们下载文件的超链接后将用户重定向到其他网页.但是,由于他们需要在打开/保存文件对话框中进行选择,因此我不想在他们接受下载之前重定向它们.
如何检测到他们执行了此操作?
我使用JSONLint来解析一些JSON,我不断收到错误:
错误:第1行的解析错误:[{"product":[{"
--- ^期待'STRING','}',得到'undefined'
这是代码:
[
{
“product” : [ { “code” : “Abc123”, “description” : “Saw blade”, “price” : 34.95 } ],
“vendor” : [ { “name” : “Acme Hardware”, “state” : “New Jersey” } ]
},
{
“product” : [ { “code” : “Def456”, “description” : “Hammer”, “price” : 22.51 } ],
},
{
“product” : [ { “code” : “Ghi789”, “description” : “Wrench”, “price” : 12.15 } ],
“vendor” : [ { “name” : “Acme …Run Code Online (Sandbox Code Playgroud) 我有一个抽象超类和两个扩展它的类
public abstract class MyAbstract {}
public class A extends MyAbstract {}
public class B extends MyAbstract {}
Run Code Online (Sandbox Code Playgroud)
我有一个接口,它有一个方法,该方法采用 MyAbstract 的子类作为其参数
public interface MyInterface {
<T extends MyAbstract> void someMethod(T param);
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个实现该接口的类
public class AnotherClass implements MyInterface {
@Override
<T extends MyAbstract> void someMethod(T param) {}
}
Run Code Online (Sandbox Code Playgroud)
但我只想允许MyAbstract在该方法中使用 的特定子类。
以下是我到目前为止尝试过的一些事情:
<T extends A> void someMethod(T param); //doesn't override the method
void someMethod(A param); //doesn't override the method
Run Code Online (Sandbox Code Playgroud)
无论如何,是否可以让接口采用通用参数,并且该接口的实现者指定该参数的更受限制的版本,或者这根本不可能?
基于下面的代码片段(为了清晰起见,它们已被缩短).
该scoreBoardState方法的目的是用于确定minimax算法中叶节点处的游戏状态的分数,该算法将被传递以确定AI进行的最佳移动.
这hasThreeInARowAndTwoOpenSpaces_Horizontal是通过scoreBoardState确定是否满足某些条件(例如连续3个令牌的玩家)调用的许多类似方法之一.如果为真,则返回满足该条件的玩家的数量,然后增加该玩家(人类玩家或AI)的得分.
需要在if语句中调用该方法以检查返回的值是否不为零(这意味着应该添加一些分数).我可以在if语句中设置方法返回的值(我在代码片段中做了),或者如果它不返回0,我可以再次调用该方法,然后将其设置为变量.显然,第二种方法效率较低,但它更易于人类阅读,更容易注意到正在发生的事情.
问题是,设置由if语句中调用的方法返回的变量被认为是不好的做法吗?或者它没关系,因为它更有效率?
注意:第二种方法的低效率增长相当快,因为它在for循环中,并且在测试每个条件时会出现这种情况很多次.它也是在minimax算法中为每个叶节点完成的(每个节点可以有7个分支)意味着深度只有3(我使用的最小值)有343个叶子节点和7个深度(目前我最高)使用)有近825,000个叶节点.
/* scores the board state of a root node in a minimax algorithm
* @gameState a 2 dimensional array that stores values for each space on the
* board. Stores 0 for empty or 1 or 2 if position is taken by a player
*/
int scoreBoardState (int[][] boardState) {
int aiScore = 0;
int playerScore = 0;
int player = -1;
for (int i = 0; i …Run Code Online (Sandbox Code Playgroud) 我正在创建一个将在WPF项目和.NET Core项目中使用的类库.
对于以下代码:
public class MyClass
{
private void MyFunction(object o)
{
if (o == DBNull)
{
//ommitted
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
当前上下文中不存在名称"DBNull"
这是在Visual Studio 2017中创建的.NET标准类库项目.
我的.NET Core项目和WPF项目都允许使用DBNull.